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}:
| URI | Contains |
|---|---|
| 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-setupfor troubleshootingcofounder-repofor CLI repository workcofounder-repo-mcpfor SSH clone and push without the CLIcofounder-socialfor 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:
| Prompt | Title | Job |
|---|---|---|
| Start My Company | Start a new company from an idea, or bring an existing company or product on (optional , , ) | |
| Catch Me Up on My Company | Summarize running work and what needs you | |
| What Should I Work On Today | Pick the few actions worth your time today | |
| Launch or Update My Website | Review the company site, make a change, and deploy it | |
| Run a Playbook | Choose a Cofounder playbook and start a run of it (optional ) | |
| Research a Topic | Research a market, competitor, or question and save the findings to the Library | |
| Write My Investor Update | Draft an investor update from company, pipeline, and traffic data | |
| Triage My Inbox | Review recent mail and support tickets, and draft replies for you to approve | |
| Import Company Context | Pull a URL or text into the company's Library and check it's searchable | |
| Generate an Image | Generate one image and follow its job to the finished output | |
| Generate a Video | Generate 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.
- Read
skill://cofounder-repo-mcp/SKILL.mdwith the client's resource reader, or callread_resourcewith that URI. - Pick the company explicitly and find its repository's
resource_idwithresources_list. - 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. - The call returns confirmed
validaccess 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.
File Links
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.
| Event | Subscribe with | You 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_deleteto stop the watch itself and its future billing. - Use
events_getwithcompany_idand the callback'seventIdasevent_idto read the full finding. Findings over the 256 KiB webhook limit arrive with the summary and watch ids but without structuredfieldsandcitations. 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-specificcursor. Verify signatures, dedupe byeventId, and return a 2xx to acknowledge. - Failures: a
410or413declines 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 withresult.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_getfor the import's status. - Retrying: keep the same import
idempotency_keyafter 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/cancelstops 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/updateaccepts 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 family | Contains |
|---|---|
| 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_uriwhen a resource returns another page or text chunk. - Readiness shows at most 50 resources, with a
truncatedflag and aresources.listnext 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.