Your desk, from inside ChatGPT or Claude
Inco speaks MCP over Streamable HTTP with OAuth 2.1. Point any host at the server URL, approve a desk, and the same tools the in-app assistant uses answer there.
https://www.incoapp.com/mcpOne endpoint. Dynamic client registration; no credentials to request from us.
Connecting
Every host does the same three things: register itself, send the broker here to approve a desk, then call tools with the token it gets back.
ChatGPT
Add it yourself- In ChatGPT, open Settings → Connectors → Add.
- Paste the Inco server address and continue.
- Sign in here and pick which desk it may see.
A listing in the ChatGPT app directory is in review. Until then this works today.
Claude
Add it yourself- In Claude, open Settings → Connectors → Add custom connector.
- Paste the Inco server address and continue.
- Sign in here and pick which desk it may see.
In Claude Code, `/plugin install inco@stellar-trading` installs the connector and the desk workflows together.
Gemini
Custom app link- Open gemini.google.com/apps and choose to add a custom app.
- Paste the Inco server address.
- Sign in here and pick which desk it may see.
Gemini draws no cards, so answers arrive as text. Nothing is missing from them.
Discovery, in full
POST /mcpwith no token returns 401 withWWW-Authenticate: Bearer resource_metadata=…(RFC 9728)./.well-known/oauth-protected-resourcenames the resource and the authorization server./.well-known/oauth-authorization-servergives the endpoints;POST /oauth/registeris RFC 7591 dynamic registration.- Authorization code with PKCE, and an RFC 8707
resourceindicator. The broker picks which desk the token speaks for.
GET /mcp answers 405 — there are no server-initiated streams, and advertising one we do not serve is worse than not offering it.
What a connection may do
Three permissions, granted separately at consent. A broker sees these words, not the scope strings.
Read your desk
desk:readSee your opportunities, deals, briefs, counterparties and what has come in. It sees exactly what your own screens show you, and nothing from any other desk.
Create and update records
desk:writeAdd an opportunity, log a deal, write a note, create a task. Changes appear in your desk's activity trail with the app that made them named.
Prepare things to send — you approve each one
desk:sendDraft a follow-up, a brief for counterparties, a message to another desk. Nothing leaves your desk without you pressing send.
45 tools
Generated from the server's own catalogue, so this table cannot describe a tool we have since renamed. Annotations are what your host shows a person before allowing a call.
Reads 33
| Tool | What it does | Arguments |
|---|---|---|
check_recurrence | Check for a repeat offer | submission_uid |
find_matches | Match opportunities to listings | – |
get_brief_pdf | Get a brief as a PDF | brief_uid |
get_checklist_status | Get a deal's checklist | deal_uid |
get_deal_documents | A deal's documents | deal_uid |
get_deal_economics | Get what a deal earns | deal_uid |
get_desk_digest | What changed on the desk | since |
get_escrow_status | Check an escrow | deal |
get_queue | What is waiting on the desk | – |
get_record | Get one record | type, uid |
get_trust_path | Get a desk's track record | desk |
list_access_requests | List access requests | – |
list_attestations | List trade confirmations | answered |
list_briefs | List briefs | state |
list_checklist_templates | List checklist templates | commodity |
list_companies | List companies | – |
list_connections | List connected desks | state |
list_deals | List deals | state, stuck_for_days |
list_duplicates | List possible duplicates | kind |
list_intake_queue | List the inbox | – |
list_mandates | List mandates | state |
list_marketplace_listings | List marketplace listings | – |
list_network_inbox | List cargo from other desks | include_declined, unanswered |
list_opportunities | List opportunities | state |
list_people | List people | – |
list_record_files | List a record's files | type, uid |
list_record_notes | Read a record's notes | type, uid |
list_saved_views | List saved views | resource |
list_tasks | List tasks due | – |
relationship_strength | Rank counterparties by contact | band, company |
search_help | Search help articles | query |
search_records | Search desk records | query, types |
summarize_pipeline | Summarize the pipeline | closing_within, group_by, include_closed |
Writes 12
| Tool | What it does | Arguments |
|---|---|---|
approve_draft | Approve a draft | draft_uid |
capture_offer | Capture an offer | sender_contact, sender_name, source_hint, text |
create_company | Create a company | description, name, website |
create_deal | Create a deal | name, opportunity_uid, owner_uid, value |
create_opportunity | Create an opportunity | category, description, looking_for, name |
create_person | Create a person | company_uid, email, name, phone, title |
create_task | Create a task | assignee_uids, description, due_on, record_uids, title |
discard_draft | Discard a draft | draft_uid |
distribute_brief | Distribute a brief | brief_uid, desk_uids |
draft_deal_document | Draft an NCNDA or IMFPA | deal_uid, kind |
draft_note | Draft a note | note, type, uid |
move_deal_stage | Move a deal's stage | deal_uid, event, lost_reason, note |
Resources and prompts
Tools answer questions. Resources make a desk browsable, and the prompts are ours — written so the first thing somebody asks a connected model is worth asking.
Resources
inco://desk | Where the book stands — Counts, live briefs, open deals, offers awaiting review. |
inco://intake | Offers awaiting review — Captured from email and WhatsApp, not yet confirmed or discarded. |
inco://opportunity/{uid} | One opportunity — Its fields, what it is linked to, its open tasks and its recent history. |
inco://deal/{uid} | One deal — Its fields, what it is linked to, its open tasks and its recent history. |
inco://company/{uid} | One company — Its fields, what it is linked to, its open tasks and its recent history. |
inco://person/{uid} | One person — Its fields, what it is linked to, its open tasks and its recent history. |
inco://brief/{uid} | One brief — Its fields, what it is linked to, its open tasks and its recent history. |
inco://record/{uid} | Any id — Resolves an id from a link to whatever it is on that desk. Ids from another desk resolve to nothing. |
Every body is returned twice: text/markdown, then application/json at the same URI with .json appended.
What to try first
- “What changed on my desk since yesterday?”
- “Log this offer onto my book”
- “Where does the Trafigura deal stand?”
Prompts
morning_digestThe morning read: what moved since you last looked, and the three things worth doing about it.
log_offer(offer)Paste an offer as it arrived and put it in the desk's Inbox, extracted and checked for recycled cargo.
deal_status(deal_uid)Economics, checklist and the next action on one deal.
Questions a review asks first
- What can an AI app see?
- Exactly what the person who connected it sees on their own screens, on the one desk they picked, and nothing from any other desk. A token is bound to (person, desk) at consent and cannot widen itself by refreshing.
- Can it send a message to a counterparty?
- No. Records — an opportunity, a deal, a contact — are created directly and come back with a link. Anything that would leave the desk is prepared as a draft and returns a URL where the broker reads it and presses send. That is structural, not a request in a prompt: there is no tool that dispatches.
- What do you store about what an app did?
- The shape of it: which tool, whether it worked, how long it took, and the one record id when a call concerned exactly one. Never the arguments and never the results — those carry cargo, counterparty and price. Those rows are deleted after 90 days.
- How does a broker cut an app off?
- Settings → AI apps, in Inco. Disconnect ends it at the next request rather than at the next login. Removing somebody from a desk, or suspending them on it, does the same to everything they had connected.
- What happens to text a counterparty wrote?
- It is delimited and labelled as quoted data wherever it reaches a model — brief summaries, enquiries, pasted offers, notes. We do not attempt to sanitise prose; the guarantee is that nothing sends without a person, so an instruction hidden in a cargo description cannot act on its own.
- Which plans include it?
- Desk and Desk Plus, and any trial. A free Network desk can complete the connection and will be offered no tools until the plan changes — the app is told why, so asking it returns the reason rather than a shrug.
Anything not answered here: support@incoapp.com. What we hold and for how long is in the privacy policy.