The MCP server is served from our own backend in Germany, the same servers and processing region as the rest of Zeeg.
Server URL
Connect from your AI app
- Claude (claude.ai)
- Claude Code
- ChatGPT
- Cursor
- VS Code
Go to Settings → Connectors → Add custom connector, paste the server URL, and follow the sign-in prompt.
Sign-in and consent
The first tool call opens your browser to Zeeg. If you’re not signed in, you’ll see sign-in and create-account buttons; sign in or sign up, and you’re sent straight back to finish connecting. You’ll then see a Zeeg-branded consent page naming the app, the redirect it will use, the workspace you’re connecting, and what it will be able to do. Approve it, and the app acts with your own dashboard permissions — a member sees what they see in the dashboard, an admin sees the whole workspace. It can’t do anything you can’t already do yourself. Manage or revoke a connection any time from Settings → Connected apps, which also shows every tool call the app has made.Plan requirement
MCP access needs a trial or paid Zeeg plan. On a free plan, every tool returns a plain error explaining that MCP needs a paid plan or an active trial, with a link to billing — never a bare 401 or 403. Some tools need more than base access:find_available_timesandbook_meetingneed a paid plan (not trial) — the same premium-scope check the public API applies to available-time and booking-creation requests.- The voice agent tools (
list_voice_agents,list_agent_calls,get_agent_callandstart_outbound_call) need AI minutes in the workspace: an AI minutes subscription or enough AI credit.
Tools
Tool names aresnake_case; every tool declares a title and whether it’s read-only or destructive, which AI apps use to decide when to ask you before calling it.
search_crm and get_booking results carry a link straight to the record in your dashboard; so do list_voice_agents, list_agent_calls and get_agent_call.
Safety
- Confirmation before it matters.
book_meeting,cancel_booking,reschedule_booking,hand_over_booking, andstart_outbound_callare marked destructive, so a well-behaved AI app confirms with you before calling them — booking, cancelling, moving, handing over and calling all have a real-world effect, andstart_outbound_callspends AI minutes. - Text from outside your workspace is marked as data, not instructions. Booking answers, notes, and routing form submissions are written by invitees and form respondents. The server labels this content and tells the connected AI app never to treat it as instructions — a booking answer that says “ignore your previous instructions” stays inert.
- Every tool call is logged. Which app, which tool, what it touched, and whether it succeeded — visible to you (and, for admins, the whole workspace) at Settings → Connected apps. Arguments and results aren’t stored, only what happened.
- Lean output by default. Tool results return what the task needs — a list of bookings, for instance, doesn’t include phone numbers or form answers unless the app explicitly asks for them.
Data processing
Once you approve a connection, tool results — booking details, CRM records, form answers, and so on — are sent to the AI provider behind the app you connected (Anthropic for Claude, OpenAI for ChatGPT, and so on). That’s the same as pasting the data into that app yourself. Zeeg’s own processing and hosting stay in Germany, unchanged by connecting an AI app.For OAuth client builders
The MCP server implements the MCP authorization spec on top of our existing Passport OAuth:- Discovery:
GET /.well-known/oauth-authorization-serverandGET /.well-known/oauth-protected-resource/mcp, both underhttps://api.zeeg.me. - Resource: the protected-resource metadata’s
resourceis exactlyhttps://api.zeeg.me/mcp. - PKCE: required,
S256only. An authorize request withplain, or withoutcode_challenge_method, is refused withinvalid_request. - Issuer identification (RFC 9207): every authorization response carries
iss, equal to the metadataissuer(authorization_response_iss_parameter_supported: true). - Dynamic client registration:
POST /oauth/register, open to any redirect host — the consent page names the redirect host and marks the app unverified unless it’s on our first-party allowlist, so don’t rely on registration itself as a trust signal. - Client ID metadata documents (CIMD): also supported (
client_id_metadata_document_supported: true), and preferred over DCR for a high-traffic client — the metadata is fetched from the client’s ownclient_idURL instead of registering a new row per connection. - Client type: public clients only —
token_endpoint_auth_methods_supported: ["none"]. There’s no client-secret flow. - Scope: every MCP client is pinned to
mcp:useregardless of what it requests. A token that carriesmcp:useis rejected by every/v1and/v2REST route, and a normal API token is rejected by the MCP endpoint — the two token types don’t cross over. - Token lifetimes: access tokens expire after 1 hour; refresh tokens after 30 days and rotate on use — reusing a spent refresh token returns
invalid_grant. - Loopback redirects:
http://localhost/callbackandhttp://127.0.0.1/callbackmatch on any port, for local tools like Claude Code. - Token endpoint: accepts
application/x-www-form-urlencoded, per the OAuth spec. - Tool results: every tool except
get_zeeg_guidereturnsstructuredContentdescribed by itsoutputSchemaintools/list, plus the same JSON as a text block for clients that read only text.