MCP Server
Connect AI agents to your Propstreet data using the Model Context Protocol.
The Propstreet MCP server lets AI assistants (Claude, Cursor, Windsurf, etc.) read and write your contacts, companies, links, properties, projects, and prospects directly. It uses the same data and permissions as the REST API, exposed over the Model Context Protocol standard.
Quick Reference
| Property | Value |
|---|---|
| Endpoint | https://app.propstreet.com/mcp |
| Transport | Streamable HTTP (stateless) |
| Auth | Bearer token (api:public scope) |
| Rate Limiting | Same as REST API, varies by token type (see Limits) |
| Discovery | GET /.well-known/oauth-protected-resource |
How It Works
Your AI Agent ──MCP protocol──▶ Propstreet MCP Server
│
Same services & tenant
isolation as REST API
│
Your contacts, companies,
links, properties,
projects & prospects
The MCP server is a thin layer over the same service layer that powers the REST API. Everything you can do via MCP respects the same permissions, rate limits, and data isolation as regular API calls.
Connecting Your AI Agent
Option 1: OAuth Auto-Connect (supported clients)
Many MCP clients support OAuth discovery + Dynamic Client Registration (DCR). Point your client at:
https://app.propstreet.com/mcp
If the client supports this flow, it will:
- Discover auth endpoints via
/.well-known/oauth-protected-resource - Register itself automatically (Dynamic Client Registration)
- Redirect you to Propstreet to approve access
- Start making tool calls
Claude (Web/Desktop)
Add the connector via Settings → Connectors and use:
- URL:
https://app.propstreet.com/mcp
[!note] For remote servers, Claude Desktop uses the Connectors UI. Remote MCP entries in
claude_desktop_config.jsonare ignored.
Cursor / Windsurf
Add an MCP server with:
- Type: Streamable HTTP
- URL:
https://app.propstreet.com/mcp
The editor will prompt you to authenticate on first use.
Option 2: Personal Access Token
For quick testing or scripts, use a PAT:
- Generate a token at Settings → Personal Settings → Personal Access Tokens
- Configure your MCP client with a Bearer token header
Claude Code (CLI)
claude mcp add --transport http propstreet \
https://app.propstreet.com/mcp \
--header "Authorization: Bearer YOUR_PAT_TOKEN"
[!note] In Claude Code CLI, remote Streamable HTTP servers use
--transport http.
curl (manual testing)
curl -X POST https://app.propstreet.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer YOUR_PAT_TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'
[!warning] PATs have lower rate limits than OAuth clients. For production use, set up a Bot User with Client Credentials. See the Authentication Guide and Limits for details.
Option 3: Bot User + Client Credentials
For production integrations:
- Create a Bot User and OAuth Client at Settings → Company Settings → Client Registrations
- Obtain an access token via Client Credentials flow (see Authentication Guide)
- Use the access token as a Bearer token in your MCP client configuration
Available Tools
Once connected, your AI agent can use up to 48 tools. Visibility is role-scoped: 26 tools are common to all accounts; broker accounts add 14 case-and-shortlist tools; investor accounts add 8 mandate-and-offer tools. Cross-role accounts (both broker and investor capabilities) see the union.
Discovery
| Tool | Description |
|---|---|
find |
Exact field-based search (field:value) across contacts, companies, and (broker) projects |
search_network |
Semantic search across the user's Network — contacts and companies, ranked by embedding similarity |
search_properties |
Spatial + asset-type search across properties the caller owns (tenant-scoped, not market comparables) |
search_projects |
(broker) Spatial + filter search across cases, including linked-property attributes |
search_mandates |
(investor) Spatial + filter search across investment strategies |
Contacts
| Tool | Description |
|---|---|
list_contacts |
List contacts with optional country and tag filters |
get_contact |
Get by smart ID (ID, email, name, or external ref) |
create_contact |
Create with name, email, phone, tags, language, company |
update_contact |
Partial update (name, email, phone, tags, language) |
delete_contact |
Permanently delete (cannot be undone). Use preview=true for dry run |
Companies
| Tool | Description |
|---|---|
list_companies |
List companies with optional country and tag filters |
get_company |
Get by smart ID (ID, name, or external ref) |
create_company |
Create with name, country, domain, tags, strategy |
update_company |
Partial update (name, country, homepage URL, domain, tags, strategy) |
delete_company |
Permanently delete (cannot be undone). Use preview=true for dry run |
Links
| Tool | Description |
|---|---|
create_link |
Create or reuse a contact-company relationship using smart contact/company refs |
delete_link |
Remove a contact-company relationship with optional preview=true dry run |
Properties
| Tool | Description |
|---|---|
list_properties |
List properties with optional country and asset-type filters |
get_property |
Get by smart ID (ID or name) |
create_property |
Create a property with description, location, tenure, and idempotency support |
update_property |
Partial update (name, description, country, locality, coordinates, tenure) |
delete_property |
Permanently delete (cannot be undone). Use preview=true for dry run |
Projects (broker)
Sell-side deals — open a project, add prospects, track stage, close on outcome.
| Tool | Description |
|---|---|
list_projects |
List with status/stage/teaser filters |
get_project |
Get by smart ID (ID, name, or external ref) |
create_project |
Create project with optional smart price and count |
update_project |
Update name, mandate notes, or smart price |
close_project |
Close as sold/withdrawn with smart deal fields |
delete_project |
Permanently delete (cannot be undone). Use preview=true for dry run |
Prospects (broker)
The shortlist of contacts and companies a broker is courting on a project.
| Tool | Description |
|---|---|
list_prospects |
List prospects on a project with pipeline stage filters |
get_prospect |
Get prospect by smart ID within smart project scope |
add_prospect |
Add contacts/companies via smart identifiers (max 100) |
update_prospect |
Update pipeline classification or external refs |
remove_prospect |
Remove prospect-list entry with optional preview=true |
batch_classify_prospects |
Classify up to 100 prospects in one call |
list_prospect_projects |
List projects where a contact or company is a prospect |
Mandates (investor)
The investor's acquisition criteria — target geography, asset types, ticket size. Used to match incoming offers.
| Tool | Description |
|---|---|
list_mandates |
List the caller's mandates |
get_mandate |
Get by smart ID (ID, name, or external ref) |
create_mandate |
Create a mandate with target geography, asset types, ticket size, and idempotency |
update_mandate |
Partial update via set / clear patch semantics |
delete_mandate |
Permanently delete (cannot be undone). Use preview=true for dry run |
Offers (investor)
Read-only inbox of cases brokers have shared with the investor.
| Tool | Description |
|---|---|
list_offers |
List offers visible to the caller, with optional case-stage / status filters |
get_offer |
Get an offer by smart ID — full case detail plus the broker's note |
Activities
| Tool | Description |
|---|---|
log_activity |
Log a note, meeting, call, email, or news against a contact, company, prospect, or offer (mutually-exclusive scope axes: networkRef, projectRef+prospectRef, or offerRef) |
list_activities |
Read activities (notes, meetings, calls, emails, audit events) across contacts, companies, projects, prospects, and offers |
Profile
| Tool | Description |
|---|---|
get_me |
The caller's identity, capability statuses (broker/investor: active/pending/inactive), and team membership |
update_me |
Update the caller's own user profile (name, job title, languages, theme) — for onboarding and business-card edits |
update_team |
Update the caller's primary team profile. Requires team-admin; investor-values fields are atomic |
Tags
| Tool | Description |
|---|---|
list_tags |
List distinct tags across contacts/companies |
Preview Mode (Destructive Tools)
All destructive tools (delete_contact, delete_company, delete_project, remove_prospect, close_project) accept preview=true. When set, the tool returns an impact summary (linked prospects, activity count, blockers) without executing the action.
Prompts (Guided Workflows)
The MCP server includes pre-built prompts that guide your AI agent through common multi-step workflows:
| Prompt | Description |
|---|---|
prospect_review |
Review all prospects on a project with pipeline analysis |
pipeline_summary |
Overview of pipeline health across all active projects |
reconcile_contacts |
Compare Propstreet contacts against external CRM data |
Use these as slash commands in your AI client (e.g., /prospect_review in Claude).
Resources
The server exposes a domain guide resource that MCP clients can read on connection:
| Resource | Description |
|---|---|
propstreet://api/schema |
Domain terminology, classifications, search operators |
This helps the agent understand Propstreet concepts (projects, prospects, pipeline stages, etc.) before making tool calls.
Example Conversations
Once connected, you can ask your AI agent things like:
- "Show me all contacts tagged 'investor' that were updated this month"
- "Create a new project called 'Oslo Office Portfolio' with exclusive mandate"
- "Create a property called 'Antwerp Logistics Park' with country BE and locality Antwerp"
- "Add these 5 contacts as prospects to project 123"
- "What's the pipeline status across all my active projects?"
- "Find companies focused on logistics real estate in Sweden"
- "Show me all properties in Sweden and clear the coordinates on property 123"
- "Log a meeting note on contact 456 about the Q1 pipeline review"
Troubleshooting
"Unauthorized" or 401 errors
- Verify your token is valid and not expired
- Ensure the token has
api:publicscope - PATs expire after 30 days — regenerate if needed
"Forbidden" or 403 errors
- Your account may lack the required permissions
- Contact your organization admin to verify your role
Rate limit errors (429)
- See Limits for current rate limits by token type
Tools not appearing
- Ensure the MCP endpoint URL is exactly
https://app.propstreet.com/mcp - Check that your client supports Streamable HTTP transport
- Try disconnecting and reconnecting the MCP server
Safety reminder
- Only connect AI clients to MCP servers you trust
- Review requested OAuth scopes before approving access
- Keep only the tools enabled that your workflow requires