Skip to main content
The Forecastable Integration MCP server exposes the same partner Integration API as MCP tools. Use it from Cursor, Claude Desktop, or any client that supports the Model Context Protocol over Streamable HTTP. Each tool maps to an Integration REST endpoint. Tool inputs mirror the REST request shape: path parameters, query params, request data, and optional headers for organization context.

Prerequisites

Before connecting an MCP client, choose how the client authenticates:
  • OAuth (recommended for Cursor and Claude) — the client prompts you to sign in and approve scopes
  • API keys — static bearer tokens for clients that do not support MCP OAuth, scripts, and server-to-server tools
Both credential types use scopes to limit what the client can access. You can optionally set a default organization with X-Organization-Id on the MCP connection.

Connect manually

For guided client setup, see ChatGPT, Claude’s Community connector, or Cursor.
Remote MCP URL
1

Open connectors in Claude

In Claude, open Customize in the sidebar, then go to Connectors.
Open Customize in Claude

Open Customize in Claude

Click the + button and choose Add custom connector.
Add custom connector in Claude

Add a custom connector

2

Add the MCP server

In the Add custom connector dialog, set:Leave Advanced settings empty. Forecastable supports OAuth Dynamic Client Registration, so Claude registers an OAuth client automatically and receives a client ID and secret without showing them to you.
Add Forecastable MCP server in Claude

Configure the Forecastable connector

3

Authorize the connector

Open the Forecastable connector in Claude and click Connect.
Connect to Forecastable in Claude

Start the OAuth connection

Forecastable prompts you to sign in (if needed) and review the requested scopes on a consent screen. Click Allow to grant access. Claude exchanges the authorization code for an access token and uses it on later MCP requests.
4

Verify the connection

After authorization succeeds, test the connector in Claude. A good first check is to list organizations, choose one, and call a read-only tool such as listAccounts.Single-organization users can call account, contact, or plan tools immediately. If an organization is missing, the error lists accessible names and IDs; retry with params.organizationId.

Troubleshooting

Confirm you are using https://app.forecastable.com/mcp and that the Forecastable OAuth discovery endpoint is reachable at https://app.forecastable.com/.well-known/oauth-authorization-server. Claude should only require manual credentials if it cannot discover or call the dynamic registration endpoint.
Claude dynamically registers https://claude.ai/api/mcp/auth_callback as its redirect URL. If you created an OAuth app manually, confirm that callback URL is listed exactly in Redirect URLs.
Disconnect and reconnect the connector so Claude can register fresh OAuth credentials. If you configured a client manually in Advanced settings, verify the client ID and client secret match the Credentials section for the same OAuth app.
Disconnect and reconnect the connector so Claude can request the updated permissions and you can approve them on the Forecastable consent screen.
Your organization is selected automatically when you have access to exactly one. With multiple organizations, ask Claude to call listOrganizations and save your choice using setActiveOrganization.

Available tools

Tools are generated from the Integration OpenAPI specification. Each tool enforces the same scope and organization rules as the corresponding REST endpoint.

Meta

Organizations

Accounts

Contacts

Opportunities

Leads

Relationship maps

Plans

Engage templates

Engage drafts

Engage lists

Engage campaigns

Engage queue (read-only)

Feed

Account inbox tools accept account UUIDs (not Relay global IDs). Thread ids may be a plain Nylas thread id or nylas:<grantId>:<threadId>. Clients should merge threads / events / slackMessages by timestamp when a single chronological list is needed. Dashboard tools (getCommunicationAnalytics, listNeedsAttention) require a user-backed token.

Calendar

Calendar tools require a user-backed token. Standard users see only their own events; admin and consulting users may also see authorized teammate events. Nested meeting tools return 404 when the event has no linked call recording. Updates apply only to viewer-owned events and push through the connected calendar provider. For “most recent meeting with X”, prefer listCalendarEvents with order=desc, a recent window, and search / participantDomain / participantEmail — do not page a wide ascending range and pick the first title match.
Tools marked as destructive (deleteAccount, deleteContact, deleteOpportunity, deleteLead, deletePlan, deletePlanMilestone, deletePlanGoal, deletePlanTask, deleteRelationshipMapContact, deleteEngageTemplate, deleteEngageList, deleteEngageCampaign, removeEngageListMember) perform soft-delete or archive operations. Confirm with your agent workflow before calling them.
Sending is REST-only. POST /engage/messages/send and POST /engage/campaigns/{campaignId}/start are deliberately not exposed as MCP tools, so an agent can prepare templates, drafts, lists, and campaigns but can never send messages or enroll recipients through MCP. Outbound operations require the REST API with the engage.queue:send scope and an Idempotency-Key header.

Authentication

Send your API key as a Bearer token on every authenticated MCP request:
Accepted credential types match the Integration REST API:
  • integration API keys issued from developer settings
  • OAuth2 authorization-code access tokens issued after user consent
  • OAuth2 client-credentials access tokens for server-to-server clients, where enabled
Revoked or expired API keys return 401 unauthorized.

Organization context

Most tools require an active organization. Provide it in one of these ways:
  1. Request header (recommended): X-Organization-Id: <uuid>
  2. Tool input headers: { "headers": { "xOrganizationId": "<uuid>" } }
  3. Query params in tool input: { "params": { "organizationId": "<uuid>" } }
  4. Saved selection: for multiple organizations, call listOrganizations, ask the user which to use, then call setActiveOrganization. The choice is stored for this user and token and survives reconnects and new chats.
Authentication resolves your current memberships within the token’s organization restrictions. When exactly one organization is accessible, it is the default on every call; setActiveOrganization is never needed. If you configure X-Organization-Id on the MCP connection, it acts as an optional default. Explicit tool headers or params override the automatic default or saved selection. If multiple explicit identifiers are supplied and they conflict, the server returns ambiguous_subscriber_context. Legacy header X-Subscriber-Id and query param subscriberId are still accepted. Optional header X-Request-Id is forwarded for tracing.

Sessions

The server uses MCP Streamable HTTP transport: After the first POST, reuse the session by sending mcp-session-id on subsequent requests.

Example tool call

Single-organization users can call listPlans with {} immediately after connecting, including after a reconnect or in a new chat. For multiple organizations, first call listOrganizations:
Ask the user which organization to use, then call setActiveOrganization to save their choice for this token:
After that, call organization-scoped tools without repeating the organization ID:
You can still pass xOrganizationId in a tool call or configure X-Organization-Id on the MCP server connection when you want an explicit default.

Scopes

MCP tools enforce the same scopes as the Integration REST API. Configure scopes on your API key or OAuth app before connecting.

Rate limits

MCP tool calls share the Integration API rate limits. When exceeded, the server returns 429 rate_limit_exceeded with a retryAfterSeconds hint.

Troubleshooting

Verify your API key is present, not expired, and not revoked. All tools except getMeta require authentication.
Check that your API key includes the scope required for the tool. For example, listAccounts needs accounts:read.
The error lists accessible organization names and IDs. Retry the failed call with params.organizationId set to the chosen ID. For multiple organizations, use setActiveOrganization to save your choice for later calls on this token. Single-organization users receive an automatic default.
The server returned not_found because MCP is disabled in that environment. Contact Forecastable if you need MCP enabled.
Ensure your client reuses mcp-session-id from the initialize response. Stale or missing session IDs return 400 validation_error.
  • API reference — full Integration REST API documentation
  • GET /meta — live metadata for auth, scopes, and limits