Cofounder

MCP Beyond Tools

Company app views, readable guides and company data, slash-command prompts, event notifications, and richer results from the Cofounder MCP, alongside its tools.

Over MCP, your agent gets more than tools. Every host (Codex, Claude, ChatGPT, Cursor) gets all of the following from the hosted server at /mcp:

  • Company app views: the company's Home, Inbox, CRM, roadmap, and domains as screens inside the chat.
  • Guides and company data to read: Cofounder's operating guides, plus the company's billing, Library, outputs, and readiness.
  • Prompts: ready-made slash commands for common jobs, like onboarding a company or generating an image.
  • Events: notifications when a prospect import finishes, a watch finds something, or a CRM reply arrives.
  • Richer results: file links you can open, structured error details, and suggested next steps.
  • Long-running imports: a prospect import your agent can check on even after reconnecting.

Hosts that don't support one of these still get the same data through plain tools.

Open Company App Views

Call company_app_open to show the company Home or another view. Hosts that don't declare MCP Apps support (such as Codex CLI, Claude Code, or Cursor) get the view's data back as text and structuredContent instead.

Home

The same Home as the dashboard, with what needs you and how the company is doing.

Inbox

To reopen a saved email draft, pass view: "inbox", company_id, and draft_id. It opens the drafts folder on that exact draft, even past the first page. For a conversation, pass thread_id instead of draft_id.

Shortened message bodies offer Read more in chat, which hands the company, mailbox, and thread to your agent. It reads the thread with email_threads_get and tells you about any history it couldn't get.

CRM

view=contacts shows the company's people, companies, and open deals (tab=pipeline). The same data is available as plain crm_* tools.

Roadmap

view=roadmap shows the company's setup milestones grouped by stage, with progress and the recommended next milestone. roadmap_get stays the plain data read.

Domains

view=domains with names (the domains your agent proposes, up to 20) checks them with the registrar and shows availability and price. Pick one, type another exact name to check, or ask for more ideas. Buying opens checkout in the dashboard. The app never buys.

With no names, it lists the company's domains with their setup status (ordered, registered, DNS, live). Pass domain_id to open one in detail, including the next step to fix its DNS. domains_discover and domains_list stay the plain data reads.

Read Guides and Company Data

Resources are read-only content your agent opens by URI. Pick the company first with user_get and company_memberships_list, then use its org_id as {company_id}:

URIContains
Company billing summary
Library departments (company admins)
Library files or folders; paginated folders return a company-addressed
Generated output listing
One generated output
Resource status and blockers, for company admins
What matters now and the next step, for company admins; links it
Brand status, brand files, and what to write next, for company admins; links it
Cofounder's own operating guides

Clients without resource support use the list_resources and read_resource tools, which reach the same URIs and return the same data as native resource reads. Library files are also available as library_* tools.

See Resource Reference for details.

Guides Your Agent Can Read

The hosted guides include:

  • cofounder-setup for troubleshooting
  • cofounder-repo for CLI repository work
  • cofounder-repo-mcp for SSH clone and push without the CLI
  • cofounder-social for social publishing

For onboarding, call onboarding_get and read the guide at the returned mcp_skill_url. CLI agents can run cofounder onboarding and follow cli_skill_url. These point to the maintained /mcp-onboarding/skill.md and /cli-onboarding/skill.md guides.

Use Prompts as Slash Commands

Prompts show up as slash commands in clients that support them. Claude Code lists them as /cofounder:<name> and also accepts /mcp__cofounder__<name>. Each one is a ready-made instruction for a common job:

PromptTitleJob
Start My CompanyStart a new company from an idea, or bring an existing company or product on (optional , , )
Catch Me Up on My CompanySummarize running work and what needs you
What Should I Work On TodayPick the few actions worth your time today
Launch or Update My WebsiteReview the company site, make a change, and deploy it
Run a PlaybookChoose a Cofounder playbook and start a run of it (optional )
Research a TopicResearch a market, competitor, or question and save the findings to the Library
Write My Investor UpdateDraft an investor update from company, pipeline, and traffic data
Triage My InboxReview recent mail and support tickets, and draft replies for you to approve
Import Company ContextPull a URL or text into the company's Library and check it's searchable
Generate an ImageGenerate one image and follow its job to the finished output
Generate a VideoGenerate one video and follow its job to the finished output

research-topic spends company credit, update-website deploys to the public site, and triage-inbox sends mail only after you approve each reply.

A prompt only appears while its tools are available; run-playbook is not enabled for every company yet.

Clone and Push Through MCP

Your agent can work on the company's managed product repository with plain Git over SSH, without the CLI. It needs a terminal, writable files, and outbound SSH to GitHub (a cloud session sandbox works). It doesn't need access to your computer, the Cofounder CLI, or a GitHub login.

  1. Read skill://cofounder-repo-mcp/SKILL.md with the client's resource reader, or call read_resource with that URI.
  2. Pick the company explicitly and find its repository's resource_id with resources_list.
  3. Register a public Ed25519 key, generated in the agent's environment, with code_repository_access_create. Any company member can do this. Keep the private key in a protected file outside the checkout, and never put it in MCP arguments.
  4. The call returns confirmed valid access and the repository SSH URL. Check that the fingerprint matches your local public key before cloning.

Only the company's managed product repository is eligible. Marketing and imported repositories can't get SSH access. SSH access covers Git only, not GitHub API calls or creating PRs.

If a response fails or is unclear, treat access as not working and retry the identical request with its original idempotency key. Nothing turns it on in the background.

Access lasts until code_repository_access_revoke succeeds, confirming GitHub removal with state=invalid and revoked_at set. Retry failed revocations yourself, because nothing cleans up in the background. Membership, repository, company, or billing changes can mark Cofounder's record invalid without deleting the key from GitHub, so invalid alone doesn't confirm removal.

Get Richer Results

On MCP, the same operations return more.

media_generate and media_get (cofounder media generate / media get on the CLI) return links to the finished files' signed download URLs. Binary library_files_get results also include a link with the file name and type. The original URL stays in the structured data and the text version. How the link shows depends on your client. To browse output records, use the company output URIs above.

Remembering the Company

agent_personalization_get returns text your agent can save to its own instructions, so later sessions know which company they work for.

Clear Errors

When a tool fails safely, it returns the error details as structured data and text, with isError set. Unexpected failures stay hidden. The error shape is separate from the tool's normal output.

Suggested Next Steps

Some responses include next_steps. Each names the operation and its arguments. A step that checks back later says how long to wait (after_seconds). A step for the founder can include poll, until, and timeout_s to say how to tell they're done. These are suggestions, not permission to send, charge, deploy, or launch another job.

  • Saved campaign drafts suggest a preview. A launched draft or unclear campaign receipt points to the original request's receipt. An unclear draft test points to the saved draft. There is no campaign review page.
  • Pending media points to its original job. Research jobs say how long to wait and point to saved results when done. An unclear research job suggests checking it rather than launching a new one.
  • Auto-recharge setup and payment recovery return the exact browser URL, then a check of the saved status. Recovery belongs to the returned pending transaction, not a new charge.
  • Repository imports that need a Vercel repository link return a step for the founder when the Git settings URL is available, then continue or read back status. Without that URL, Cofounder doesn't invent one.

Keep returned URLs exactly as given, including query parameters and company scope. Navigation and recovery URLs stay in structured fields. Files you can download also get links.

Get Notified With Events

With the hosted OAuth sign-in, hosts that support the draft MCP Events extension (protocol version 2026-07-28) can subscribe to webhook notifications. server/discover advertises capabilities.events, and hosts use events/list, events/subscribe, and events/unsubscribe on the same signed-in endpoint. Hosts without Events support can keep checking with the matching read tools.

EventSubscribe withYou hear about
, A prospect import finishing
, A new watch finding
, A watch stopping because the company couldn't pay
A new inbound CRM reply

These are the most common ones. events/list returns the full catalog, including research, media, and Edge Function deploy outcomes, each with its subscription arguments. An event never gives permission to take further action.

Prospect-Import Outcomes

Subscribe to crm.prospects.import.finished with company_id and the import's job_id. The event reports a final succeeded, failed, or cancelled outcome, and is replayed to a subscriber that connects after the import finished. Get row results with crm_prospects_imports_get, or with the saved task ID through tasks/get when the host supports Tasks. Retries keep the same event ID. On a repeated callback, read the result. Don't start another import.

Watch Findings and Stops

Subscribe to watch.event.detected with company_id and watch_id to get new findings, with a summary and citations. Use watches_list to find an existing watch. Subscribing doesn't create or run a watch and doesn't change its billing.

Subscribe separately to watch.stopped with the same arguments to learn when the company couldn't pay for a recheck. The stop can still be delivered after the watch is removed, as long as you keep company access.

  • New subscriptions start from now and skip older findings. Refreshing keeps your place. After a subscription lapses, pass a cursor you received before to resume. Events that arrive during callback verification are included.
  • Unsubscribing stops notifications. Use watches_delete to stop the watch itself and its future billing.
  • Use events_get with company_id and the callback's eventId as event_id to read the full finding. Findings over the 256 KiB webhook limit arrive with the summary and watch ids but without structured fields and citations. The full event stays in the log.

CRM Replies

Subscribe to crm.reply.received with company_id to get inbound CRM replies. It defaults to human replies. Set reply_kind to auto_reply for automatic replies. Optional contact_id and account_id narrow it. New subscriptions start from now. After a lapse, pass an earlier cursor to resume. The callback has a safe reply summary and activity ids, and events_get gets the full event. Replies are recorded on a best-effort basis, so a CRM activity without a recorded event won't send a callback.

Cofounder Support Tickets

Subscribe to cofounder_support.ticket.updated with a ticket's id as ticket_id and its company_id, both from support_get or support_list, to learn when Cofounder Support replies or changes the ticket's status. Only the account that filed the ticket can subscribe. New subscriptions start from now, so read support_get after subscribing to catch a reply that arrived first. The callback carries the ticket id and whether the update is a reply or a status change, never message text. Tickets without a company_id can't be subscribed to.

Delivery and Subscription Rules

Host builders need these rules. The delivery flow:

subscribe with callback + whsec_ secret → signed verification challenge → echo it → delivery on → signed callbacks → 2xx ack

  • Setup: the host supplies a public HTTPS callback and a Standard Webhooks whsec_ secret. Cofounder sends a signed verification challenge and turns on delivery only after a successful response that echoes it.
  • Callbacks include eventId, name, timestamp, data, and a subscription-specific cursor. Verify signatures, dedupe by eventId, and return a 2xx to acknowledge.
  • Failures: a 410 or 413 declines that one event and delivery moves on. Any other failure is retried with backoff for about an hour, holding later events for that subscription. After that the event is skipped. Redirects are not followed.
  • Timing: delivery runs every minute and can take longer under backlog or retries. Acknowledging only records receipt. The host decides when to tell the user or continue work.
  • Lifetime: subscriptions belong to the signed-in account and OAuth connection. Refresh with the same event, arguments, and callback before the returned refreshBefore. Lifetimes are capped at one hour, with at most 100 active subscriptions per account.
  • Cursors: a live subscription keeps its own place, so a cursor sent with a refresh is ignored. A lapsed or unsubscribed one resumes from the cursor you pass when subscribing again.
  • Ending: unsubscribe with the same event, arguments, and callback. Revoking the connection removes its subscriptions at once. Losing company access removes a subscription at its next delivery. A connection that expires without being revoked can't refresh, so its subscriptions end within an hour.

Track Long-Running Prospect Imports

On protocol version 2026-07-28, /mcp advertises io.modelcontextprotocol/tasks under server/discover's capabilities.extensions. A supporting host declares that extension on each request in _meta["io.modelcontextprotocol/clientCapabilities"].extensions. Then crm_prospects_import returns a receipt with resultType: "task" and a taskId. Save the ID and check back with tasks/get, even after reconnecting. Wait the returned pollIntervalMs between checks.

  • Finishing: the task follows the import through the CRM writes, so submitting alone isn't finishing. A completed task has the final tool result in result. A failed import is a completed task with result.isError: true. The first final result stays fixed even if the import is later retried.
  • Expiry: you can check the task for seven days from when the import started, and each check confirms you still have company access. After that, use crm_prospects_imports_get for the import's status.
  • Retrying: keep the same import idempotency_key after an unclear response.
  • Without Tasks: older protocol versions, hosts without the extension, and nested calls through a tool proxy get the ordinary response and use crm_prospects_imports_get.
  • Cancelling: tasks/cancel stops an active prospect import when it can, but CRM writes that already finished aren't undone. Keep checking for the outcome. The import never asks for input midway. tasks/update accepts answers to unknown input keys without changing the import.

Resource Reference

Picking the Company

With the hosted OAuth sign-in, every company resource URI names its company, and every read checks your current membership and permissions. Company resources aren't listed from a default company, and short URIs without a company aren't accepted. Discover the templates and name the company. Guides (skill://) don't depend on a company.

Older connections whose token names a company can also use these short URIs, which read that token's company:

URI familyContains
The company's billing summary
Library files, browsable by department and path (company admins)
Generated outputs by id

With the hosted OAuth sign-in, Library autocomplete isn't offered unless you belong to exactly one company, because that host shortcut can't pick a company. Agents can still read the Library through company tools and resource URIs. Older connections keep the shortcuts.

Readiness

The readiness resource summarizes each resource's status, blockers first. Follow each returned resources.get next step for exact recovery instructions. Status doesn't mean a company goal is ready to run, and doesn't grant permission to act.

Paging and Limits

  • Follow next_uri when a resource returns another page or text chunk.
  • Readiness shows at most 50 resources, with a truncated flag and a resources.list next step when more exist.

Billing

company_get and billing resources return the company's billing status, balance, spending, limits, and payment settings. Billing messages explain any issues and send the user to the dashboard. Payment links are left out. CLI and API responses include payment links and recovery guidance.

Skills Extension

Hosts that support the official MCP Skills extension on protocol 2026-07-28 can find bundled guides with skills/list and confirm one with skills/get. Each entry has its full frontmatter and a file list with SHA-256 digests and byte sizes. Read files with resources/read. Hosts without Skills support keep using list_resources, read_resource, and each guide's _manifest resource.

Caching

Guide discovery and file reads suggest a five-minute private cache. Guides and file lists describe one deployment. Company resource reads suggest no caching (zero TTL, private), so clients refresh the state and any expiring URLs, and keep cached content within its sign-in context. These hints don't cache tool calls on the server.

Sign-In

All hosts use the same Cofounder account and OAuth resource identity. Connection listing and revocation cover all account connections.

Server Card

Clients can discover the hosted server without connecting: an unauthenticated GET <mcp-url>/server-card returns an MCP Server Card (application/mcp-server-card+json, cacheable for an hour, with an ETag). It has the server's name, title, version, icons, website, the streamable HTTP endpoint with its supported protocol versions, and the OAuth protected resource metadata URL under _meta. It lists no tools or capabilities. Those come from the live connection, which wins wherever the two differ.

The Reference names every operation across all three surfaces and shows how the spellings map.