MCP server & SDK

Give Claude and other MCP clients tools over your workspace, or build your own integration with the TypeScript SDK

Two ways to put Exponential inside software you already use. The MCP server (exponential-mcp) exposes your workspaces, projects, actions, meetings and goals as tools to any Model Context Protocol client, such as Claude Desktop or Claude Code, so you can ask "what is on my plate today?" in a chat and have the answer come from your real data. The SDK (exponential-sdk) is the TypeScript client both the MCP server and the CLI are built on, for when you are writing your own script or service.

Both act as you, with a JWT token from Settings → API keys. If you want an agent to have its own identity and attribution instead, give it an external agent key; the SDK accepts that too.

Where to find it

How to connect Claude with the MCP server

  1. Create a JWT Token under Settings → API keys and copy it.

  2. In a terminal, run the setup and paste the key when asked:

    npx exponential-mcp init

    It stores the key locally and, on a Mac, writes the Claude Desktop configuration for you. Restart Claude Desktop.

  3. For Claude Code, add a .mcp.json to the project instead:

    {
      "mcpServers": {
        "exponential": {
          "command": "npx",
          "args": ["-y", "exponential-mcp", "serve"]
        }
      }
    }

    The serve argument is required. Reload the window afterwards.

  4. Check the setup with exponential-mcp doctor, which also prints a configuration snippet for your machine; exponential-mcp config shows where the key is stored.

Then ask Claude: "What projects am I working on?", "Add an action to call John tomorrow", "Summarise yesterday's leadership sync", "Which key results are off track?"

What the MCP tools do

ToolWhat it does
get_workspacesList your workspaces
get_projects, get_project, update_projectList, read and update projects
get_actionsList actions, filtered by project or status
get_todays_actionsWhat is on your plate now: overdue, today and inbox, across workspaces
get_overdue_triageWhy the overdue pile is that size: bulk-created cohorts versus real debt
create_action, update_action, complete_actionCreate (natural language works), change and finish actions
reschedule_actions, defer_actionsMove actions to a new date, or clear their dates back to the backlog
get_meetings, get_meeting, create_meeting, update_meeting, append_meeting_notesRead and write meetings and their notes
get_goals, get_key_resultsObjectives and key results with progress
searchSearch across everything, like the app's ⌘K palette

Claude is told to use get_todays_actions rather than get_actions for anything about today or priorities, and to run get_overdue_triage before deciding what to do with a large overdue count.

How to use the SDK

npm install exponential-sdk
import { ExponentialClient } from "exponential-sdk";

const client = new ExponentialClient({
  token: process.env.EXPONENTIAL_TOKEN!,
  apiUrl: "https://<your-exponential-host>",
});

const workspaces = await client.workspaces.list();
const today = await client.actions.getToday(workspaces[0]!.id);

await client.decisions.create({
  workspaceId: workspaces[0]!.id,
  statement: "Ship the importer behind a flag",
  status: "ACCEPTED",
  source: "AGENT",
});

The client has one namespace per object: workspaces, projects, actions (and actionComments), goals, keyResults, meetings, decisions, calendar, products, features, scopes, requirements, userStories, tickets, epics, cycles, labels, areas, pages, contacts, organizations, pipelines and search. saveConfig and loadConfig persist the token and host in the same store the CLI and MCP server use, so the three can share one sign-in. API errors are thrown; isTRPCError(error) tells them apart from other failures and carries the server's message.

How it connects

  • API tokens — the key everything here signs in with: API tokens.
  • External agents — a separate identity for autonomous software, with the same SDK: External agents.
  • CLI — the same SDK on the command line, every command documented in the CLI reference.
  • Zoe — the assistant inside the app has more tools than the MCP server exposes; the MCP server is for bringing your data into other assistants: Zoe.

FAQ

Which Claude clients work? Claude Desktop (configured by init) and Claude Code (via .mcp.json). Any other MCP client that can run a local command works with the same serve command.

Is the key sent to the MCP client? No. The key stays in the local config store; the server reads it when it starts.

Does the MCP server see every workspace? Every workspace the key's owner is a member of. Scope tools with a workspace id when it matters.

Can I use the SDK from Python? Not yet. The SDK is TypeScript; other languages can call the same HTTP API with the bearer token.

Last updated Edit this page on GitHub