MCP Server
Connect Claude Desktop, Cursor, Codex, and other AI assistants to the Syndic+ MCP server.
What is MCP?#
Model Context Protocol (MCP) is an open standard from Anthropic that lets AI assistants talk to external services securely. Syndic+ exposes an MCP server that provides access to 181 tools across 22 modules — co-owners, meetings, finances, projects, and more.
With the MCP server, you can ask Claude, Cursor, or Codex: "List co-owners more than 30 days late" or "Create an assessment notice for Q3 2026" — the AI calls the right Syndic+ tools directly.
MCP server URL#
https://app.syndicplus.ca/api/mcp
The server uses HTTP streamable transport (JSON-RPC 2.0 over POST) and requires OAuth 2.1 authentication (or an sk_* API key).
Configure Claude Desktop#
Open settings
Claude Desktop → Settings → Developer → Edit Config.
Add the Syndic+ server
{
"mcpServers": {
"syndic-plus": {
"url": "https://app.syndicplus.ca/api/mcp",
"transport": "http"
}
}
}
Restart Claude
Quit Claude Desktop fully, then reopen it. syndic-plus appears in the toolbar.
Grant access
On the first tool call, Claude opens your browser to the Syndic+ consent page. Pick the syndicate and click Authorize.
Configure Cursor#
Open MCP settings
Cursor → Settings → Features → Model Context Protocol.
Add a server
- Name:
syndic-plus - URL:
https://app.syndicplus.ca/api/mcp - Transport: HTTP
Authenticate
Cursor launches the OAuth 2.1 flow in an embedded browser. Approve the consent.
Configure Codex / OpenAI GPTs#
OpenAI GPTs don't natively support MCP. Use the Syndic+ REST API directly with an sk_* API key (see Authentication).
Test with MCP Inspector#
pnpm mcp:inspector
Or via CLI:
npx @modelcontextprotocol/inspector https://app.syndicplus.ca/api/mcp
The inspector lists every available tool, lets you invoke them manually, and shows raw JSON-RPC responses.
Tool list by module#
| Module | Tools | Examples |
|---|---|---|
| Co-owners | 4 | list_co_owners, create_co_owner, update_co_owner, delete_co_owner |
| Units | 4 | list_units, create_unit, update_unit, delete_unit |
| Water heaters (Bill 141) | 4 | list_water_heaters, mark_water_heater_replaced, … |
| Insurance | 4 | list_insurance_policies, create_insurance_policy, … |
| Contractors | 4 | list_contractors, create_contractor, … |
| Meetings |
Tool format#
Every tool follows the MCP standard with:
- Name (e.g.
create_co_owner) - Description (e.g. "Creates a new co-owner in the current syndicate")
- JSON schema for input parameters
- JSON schema for output
Example invocation:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_co_owner",
"arguments": {
"firstName": "Marie",
"lastName": "Tremblay",
"email": "marie@example.com",
"unitId": "550e8400-e29b-41d4-a716-446655440000"
}
}
}
OAuth 2.1 consent flow#
- The AI assistant starts the authorization flow by opening
/api/oauth/authorize - The user is redirected to Syndic+ and signs in (if not already signed in)
- The user picks the syndicate to grant access to (important: multi-syndicate accounts see the list)
- The consent page shows the requested scopes (
read:co-owners,write:meetings, …) - After approval, a JWT
access_tokenis issued and used for all subsequent calls
Security#
- Every call is audited in the audit log (accessible at Settings → Security → Audit)
- Scopes are enforced: a token with only
read:financescannot callcreate_notice - Rate limiting: see Rate Limits
- Revocation: the user can revoke an integration at any time from Settings → Integrations → Connected apps