Coterie for agents
Coterie is relationship memory: the people you care about, what they love, when you were last together, and the gatherings that bring them into a room. It speaks MCP, so an assistant you authorize can read your circle and write to it — add a person, log a coffee, build a guest list — with a key you issue and can end at any time.
The endpoint
https://trycoterie.app/api/mcp
- Transport: Streamable HTTP — JSON-RPC 2.0 over
POST. Every method answers in a single response, so there is no SSE channel;GETreturns 405 rather than holding a connection open. - Authentication: an API key, sent as
Authorization: Bearer ctk_…. Never in a query parameter. A missing or ended key returns 401 withWWW-Authenticate: Bearer. - Protocol revisions: 2025-06-18, 2025-03-26 and 2024-11-05. The revision a client asks for is echoed back when it is one of those.
- Capabilities: tools only. No resources, no prompts, no sampling.
Getting a key
A key belongs to one member and is made by that member, not by us. Sign in, open your account page, find Connected agents, name the key and press Connect.
It is shown once. Coterie stores a SHA-256 hash of it and the first twelve characters — enough to tell two keys apart in a list, useless for authenticating. Nobody, Coterie included, can read a key back after it is made; if one is lost, end it and make another.
Ending a key takes effect on the next request. Closing an account ends every key it holds. Ten live keys per account.
Checking it works
curl -s https://trycoterie.app/api/mcp \
-H "Authorization: Bearer ctk_..." \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"coterie_account","arguments":{}}}'A live key answers with the member’s name and the size of their circle. A dead one answers 401.
What it can do
Nineteen tools. Each carries a title, a description saying when to call it, an explicit input schema, and annotations marking whether it reads, writes, or destroys.
People
list_people— the circle, filtered by name, closeness, or personal versus professionalget_person— one person in full, with recent interactions and the gatherings they are oncreate_person— add someone; only a name is requiredupdate_person— change what is remembered; only the fields sent are toucheddelete_person— remove them permanently — requires their exact full name backwho_needs_attention— who has slipped past the rhythm the member set, furthest overdue first
Time spent
log_interaction— record a coffee, a call, a note — this is what resets the rhythmlist_interactions— the log, for everyone or one person
Gatherings
list_gatherings— plans, filtered by status or kind, or only what is still aheadget_gathering— one plan with its guest list, run of show, and what is outstandingcreate_gathering— start a planupdate_gathering— change one
Guest lists
add_guest— seat someone from the circleupdate_guest— move them along — confirmed, declined, attended — or record a plus one or a dietary noteremove_guest— take the seat back; the person record is untouched
Open loops
list_threads— what the member said they would docreate_thread— write one downclose_thread— mark it done
The connection itself
coterie_account— who the key acts for, and the size of their circle
What it cannot do
These are properties of how the connector is built, not settings that can be changed by asking.
- Reach another member. Every query is narrowed to the key’s own account, and a gathering’s guest list is only reachable once that gathering has been proved to belong to the caller.
- Reach a gathering someone else owns, even one the member co-hosts. Co-hosting stays in the browser.
- Read budgets, vendor terms, guests’ invitation links, or guests’ conversations with the Social Secretary. Those tables are not named anywhere in the connector, so no tool can reach them.
- Get past a plan limit. The free tier’s edges are enforced in the database itself, so they hold for an agent exactly as they hold in the browser. When one is reached, the tool answers with a sentence saying so.
- Delete a person by accident. Removing a person takes their interactions and guest entries with them, so the tool requires that person’s exact full name as a second argument and refuses if it does not match.
Access requirements
A free Coterie account is enough. There is no separate developer plan, no allowlist, no regional restriction, and no per-key charge.
Free accounts hold up to 25 people, three gatherings a year, and twelve seats at a table; experiential productions and vendor work come with membership. A connector acting for a free account meets those same edges. What membership includes.
Your data
A key acts as the member who made it. What an assistant then does with what it reads is governed by whoever makes that assistant, not by Coterie — including whether they retain it or train on it. Coterie itself never sells your data, never advertises from it, and never uses it to train models.
The full terms are in the privacy policy under Connected agents, alongside the Terms of Use.
Questions, or a connector you would like built: get in touch.