# Tandem

> Tandem is a CRM built for AI agents. Claude, ChatGPT, Codex, Cursor and any other MCP client connect to Tandem's MCP server (https://api.tandemcrm.app/mcp, streamable HTTP, OAuth 2.1 or API key) to manage companies, people, deals, activity, tasks, buying signals and custom fields. Every change is signed with who made it, uncertain changes are proposed for a person to approve, and companies and people are deduplicated by domain and email. Pricing is per workspace with unlimited members and agents.

Key facts:

- MCP server: https://api.tandemcrm.app/mcp
- REST API: https://api.tandemcrm.app/v1/ops (the same operations as the MCP tools)
- Web app: https://app.tandemcrm.app
- Scopes: crm:read, crm:suggest, crm:write, crm:delete
- Full documentation in one file: https://tandemcrm.app/llms-full.txt

## Start here

- [Tandem documentation](https://tandemcrm.app/docs.md): Tandem is a CRM built for AI agents. Connect Claude, ChatGPT, Codex, Cursor or any MCP client to Tandem's MCP server and let it manage companies, people, deals, tasks and buying signals.
- [Quickstart](https://tandemcrm.app/docs/quickstart.md): Create a Tandem workspace, connect your AI agent over MCP, and give it its first tasks.

## Connect your agent

- [Connect your agent](https://tandemcrm.app/docs/connect.md): How to connect Claude, Claude Code, ChatGPT, Codex, Cursor, VS Code, Gemini CLI, Hermes, Muse, Delegated or any MCP client to Tandem.
- [Connect Claude to Tandem](https://tandemcrm.app/docs/connect/claude.md): How to connect Claude to Tandem's MCP server and sign in with OAuth. Claude.ai and Claude Desktop connect with just the address. You sign in and choose a workspace once.
- [Connect Claude Code to Tandem](https://tandemcrm.app/docs/connect/claude-code.md): How to connect Claude Code to Tandem's MCP server and sign in with OAuth. Claude Code adds Tandem as a remote HTTP server. The first time you use it, it opens a browser for you to sign in.
- [Connect ChatGPT to Tandem](https://tandemcrm.app/docs/connect/chatgpt.md): How to connect ChatGPT to Tandem's MCP server and sign in with OAuth. ChatGPT connects to Tandem as a custom connector, with Tandem's views shown inline in the chat.
- [Connect Codex to Tandem](https://tandemcrm.app/docs/connect/codex.md): How to connect Codex to Tandem's MCP server and sign in with OAuth. Codex adds Tandem as a remote MCP server and signs in through your browser.
- [Connect Cursor to Tandem](https://tandemcrm.app/docs/connect/cursor.md): How to connect Cursor to Tandem's MCP server and sign in with OAuth. Cursor connects to Tandem's remote server and signs in through your browser.
- [Connect VS Code to Tandem](https://tandemcrm.app/docs/connect/vs-code.md): How to connect VS Code to Tandem's MCP server and sign in with OAuth. GitHub Copilot's agent mode in VS Code connects to Tandem as an HTTP server and signs in through your browser.
- [Connect Gemini CLI to Tandem](https://tandemcrm.app/docs/connect/gemini-cli.md): How to connect Gemini CLI to Tandem's MCP server and sign in with OAuth. Gemini CLI connects over streamable HTTP and discovers Tandem's sign-in on its own.
- [Connect Hermes to Tandem](https://tandemcrm.app/docs/connect/hermes.md): How to connect Hermes to Tandem's MCP server and sign in with OAuth. Hermes Agent connects over OAuth. The first time it runs, it opens a browser for you to sign in.
- [Connect Muse to Tandem](https://tandemcrm.app/docs/connect/muse.md): How to connect Muse to Tandem's MCP server with an API key. Muse builds its own connector for Tandem from the address and an API key.
- [Connect Delegated to Tandem](https://tandemcrm.app/docs/connect/delegated.md): How to connect Delegated to Tandem's MCP server with an API key. Delegated's agents call Tandem through Custom APIs, using Tandem's REST API: the same actions agents use over MCP.
- [Connect Any MCP client to Tandem](https://tandemcrm.app/docs/connect/other.md): How to connect Any MCP client to Tandem's MCP server and sign in with OAuth. Anything that speaks MCP over streamable HTTP. Clients that can sign in use OAuth; scripts and agents you run yourself use an API key.

## Concepts

- [Permissions and scopes](https://tandemcrm.app/docs/permissions.md): Tandem's four scopes, crm:read, crm:suggest, crm:write and crm:delete, and which tools each one allows.
- [Records and data model](https://tandemcrm.app/docs/data-model.md): Tandem's records: companies, people, deals, deal contacts, activities, tasks, signals, suggestions and custom fields, and how they relate.
- [Suggestions and approvals](https://tandemcrm.app/docs/suggestions.md): How an agent proposes a change in Tandem with suggest_change, and how people approve or reject it in Review.
- [Agent identity and audit](https://tandemcrm.app/docs/agent-identity.md): Every change in Tandem is signed with who made it, which agent and on whose behalf, and shown in the change history.
- [Untrusted content](https://tandemcrm.app/docs/untrusted-content.md): How Tandem marks text written by users or third parties as untrusted_content so agents treat it as data, not instructions.

## MCP features

- [Prompts, resources and server instructions](https://tandemcrm.app/docs/prompts-and-resources.md): Tandem's MCP prompts (enrich_leads, find_signals), its resources and the instructions it gives every agent.
- [Widgets (MCP Apps)](https://tandemcrm.app/docs/widgets.md): Tandem renders its pipeline, records, tasks, signals, suggestions and change feed as interactive views inside Claude, ChatGPT and other MCP Apps hosts.

## Tools reference

- [Tools reference](https://tandemcrm.app/docs/tools.md): Every tool in Tandem's MCP server: describe_schema, create_task, update_task, complete_task, list_tasks, list_enrichment_queue, record_signal, list_signals, update_signal, convert_signal, add_suppression, remove_suppression, list_suppressions, search, list_records, get_record, get_pipeline, upsert_company, enrich_company, upsert_person, create_deal, update_deal, set_deal_contact, remove_deal_contact, set_custom_fields, log_activity, suggest_change, list_suggestions, review_suggestion, delete_record, list_changes, list_fields, define_field, archive_field.

## Tools: Orient and read

- [describe_schema (Tandem MCP tool)](https://tandemcrm.app/docs/tools/describe_schema.md): Describe the record types, fields, deal stages and activity types in this workspace. Call this once before writing so you use valid values.
- [search (Tandem MCP tool)](https://tandemcrm.app/docs/tools/search.md): Find companies, people and deals by name, domain, email or title. Use this before creating anything, and to resolve a name to an id.
- [list_records (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_records.md): List companies, people or deals, most recently changed first, with who changed each one last. Filter by text, deal stage or company. Use `search` instead to find one record across all types.
- [get_record (Tandem MCP tool)](https://tandemcrm.app/docs/tools/get_record.md): Get one company, person or deal with the context you need to act on it: related people, deals and company, the 10 most recent activities, and who changed which fields recently.
- [get_pipeline (Tandem MCP tool)](https://tandemcrm.app/docs/tools/get_pipeline.md): The deal pipeline at a glance: every open and closed deal grouped by stage, with counts and totals per stage. Use it to answer how the pipeline looks, or before moving deals between stages.
- [list_changes (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_changes.md): Read the change feed: every write in this workspace, with who made it and which fields changed. To catch up, page forward: pass the returned `next_cursor` back as `after`. To see what happened recently, pass `latest: true` for the newest changes first.

## Tools: Companies and people

- [upsert_company (Tandem MCP tool)](https://tandemcrm.app/docs/tools/upsert_company.md): Create a company, or update it if one with the same domain already exists. Always prefer this over creating blindly: it deduplicates on the normalized domain (https://www.acme.com/x → acme.com). Only the fields you pass are changed.
- [enrich_company (Tandem MCP tool)](https://tandemcrm.app/docs/tools/enrich_company.md): Fill logo, description and social links from a company's own website. Requires a company with a domain. Existing human values are preserved.
- [upsert_person (Tandem MCP tool)](https://tandemcrm.app/docs/tools/upsert_person.md): Create a person (contact), or update them if one with the same email already exists. Deduplicates on the lowercased email. Only the fields you pass are changed. Link them to a company with `company_id` (find it with `search` or `upsert_company`).
- [list_enrichment_queue (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_enrichment_queue.md): Find incomplete people and companies or stale website enrichment. Excludes do-not-contact entries and records an agent enriched in the last 7 days. Missing filters match any requested field.

## Tools: Deals

- [create_deal (Tandem MCP tool)](https://tandemcrm.app/docs/tools/create_deal.md): Create a deal (opportunity) in the pipeline. Search first: if a deal for this company and purpose already exists, use `update_deal` instead.
- [update_deal (Tandem MCP tool)](https://tandemcrm.app/docs/tools/update_deal.md): Update a deal: move it to another stage, change its amount, rename it, or set custom fields. Only the fields you pass are changed.
- [set_deal_contact (Tandem MCP tool)](https://tandemcrm.app/docs/tools/set_deal_contact.md): Add a person to a deal, or change their role on it: who the champion is, who decides, who signs. A deal can have many people; a person can be on many deals.
- [remove_deal_contact (Tandem MCP tool)](https://tandemcrm.app/docs/tools/remove_deal_contact.md): Take a person off a deal. The person and the deal are kept.

## Tools: Activity and tasks

- [log_activity (Tandem MCP tool)](https://tandemcrm.app/docs/tools/log_activity.md): Record a note, email, call or meeting against a company, person or deal.
- [create_task (Tandem MCP tool)](https://tandemcrm.app/docs/tools/create_task.md): Book a next step, optionally linked to one record and a signal. Due is an ISO date (any time that day) or datetime with offset. Identical open tasks return created:false.
- [update_task (Tandem MCP tool)](https://tandemcrm.app/docs/tools/update_task.md): Change only supplied task fields. Null clears due, assignee or record. Use complete_task to mark done.
- [complete_task (Tandem MCP tool)](https://tandemcrm.app/docs/tools/complete_task.md): Complete a task once; an optional outcome also logs a note on its linked record in the same transaction.
- [list_tasks (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_tasks.md): Read next steps, overdue first and undated last. Defaults to your open tasks. Supply an IANA timezone for local calendar day boundaries.

## Tools: Buying signals

- [record_signal (Tandem MCP tool)](https://tandemcrm.app/docs/tools/record_signal.md): Record an observed buying signal with a one-line why-now and evidence URL. Duplicates return the existing signal, created:false. Suppressed people are refused.
- [list_signals (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_signals.md): Rank buying signals by timing × distinct signal types on the account. Person signals count toward their company. Dismissed signals do not add strength.
- [update_signal (Tandem MCP tool)](https://tandemcrm.app/docs/tools/update_signal.md): Dismiss a signal or mark it converted after creating a deal. Optionally leave a note.
- [convert_signal (Tandem MCP tool)](https://tandemcrm.app/docs/tools/convert_signal.md): Create a deal for a signal's company and mark it converted atomically.

## Tools: Suggestions

- [suggest_change (Tandem MCP tool)](https://tandemcrm.app/docs/tools/suggest_change.md): Propose a change for a person to approve instead of making it. Use it when you aren't sure a fact is right, when the change is consequential (a deal's stage or amount), or when your access only allows suggesting. Give the operation you would call and its exact input, a one-sentence reason, and the evidence you saw. The input is validated now; nothing changes until someone approves.
- [list_suggestions (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_suggestions.md): List proposed changes and whether they were approved or rejected. Defaults to pending ones. Check here before suggesting the same change twice.
- [review_suggestion (Tandem MCP tool)](https://tandemcrm.app/docs/tools/review_suggestion.md): Approve or reject a suggested change. Approving runs it.

## Tools: Custom fields

- [list_fields (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_fields.md): The custom fields defined for companies, people and deals.
- [define_field (Tandem MCP tool)](https://tandemcrm.app/docs/tools/define_field.md): Add a custom field to companies, people or deals, or change an existing one's label, options or description.
- [archive_field (Tandem MCP tool)](https://tandemcrm.app/docs/tools/archive_field.md): Hide a custom field. Values already stored are kept, and defining it again brings them back.
- [set_custom_fields (Tandem MCP tool)](https://tandemcrm.app/docs/tools/set_custom_fields.md): Set custom field values on one company, person or deal by id. Use the field keys and types from describe_schema; pass null to clear a field. Fields you don't mention are left alone.

## Tools: Do-not-contact

- [add_suppression (Tandem MCP tool)](https://tandemcrm.app/docs/tools/add_suppression.md): Prevent outreach to an email or domain, including when someone asks not to be contacted.
- [remove_suppression (Tandem MCP tool)](https://tandemcrm.app/docs/tools/remove_suppression.md): Remove a do-not-contact entry. Only a signed-in workspace admin can do this.
- [list_suppressions (Tandem MCP tool)](https://tandemcrm.app/docs/tools/list_suppressions.md): Read the do-not-contact list before enriching contacts or preparing outreach. Page with next_cursor.

## Tools: Deleting

- [delete_record (Tandem MCP tool)](https://tandemcrm.app/docs/tools/delete_record.md): Soft-delete a company, person or deal. It disappears from search and can be restored by an admin.

## Reference

- [Authentication: OAuth and API keys](https://tandemcrm.app/docs/authentication.md): Tandem's MCP authentication: OAuth 2.1 with PKCE and dynamic client registration, discovery endpoints, token lifetimes, and API keys.
- [REST API](https://tandemcrm.app/docs/rest-api.md): Call every Tandem operation over HTTP: list operations with GET /v1/ops and run one with POST /v1/ops/<name>.
- [Errors and limits](https://tandemcrm.app/docs/errors-and-limits.md): Tandem's error codes (invalid_input, not_found, forbidden, conflict, unauthorized, payment_required, rate_limited) and usage limits.

## Using Tandem

- [Import and export](https://tandemcrm.app/docs/import-export.md): Import people and companies into Tandem from a CSV, export a whole workspace, and export or erase one person's data.
- [Pricing and billing](https://tandemcrm.app/docs/billing.md): Tandem costs $29 per workspace a month or $290 a year, with unlimited members and agents and a 14-day free trial.
- [Security and privacy](https://tandemcrm.app/docs/security.md): How Tandem isolates workspaces, protects agent access, and handles personal data.
- [FAQ](https://tandemcrm.app/docs/faq.md): Common questions about Tandem, the CRM for AI agents: which agents work, MCP, safety, pricing and data.
