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; GET returns 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 with WWW-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 professional
  • get_person — one person in full, with recent interactions and the gatherings they are on
  • create_person — add someone; only a name is required
  • update_person — change what is remembered; only the fields sent are touched
  • delete_person — remove them permanently — requires their exact full name back
  • who_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 rhythm
  • list_interactions — the log, for everyone or one person

Gatherings

  • list_gatherings — plans, filtered by status or kind, or only what is still ahead
  • get_gathering — one plan with its guest list, run of show, and what is outstanding
  • create_gathering — start a plan
  • update_gathering — change one

Guest lists

  • add_guest — seat someone from the circle
  • update_guest — move them along — confirmed, declined, attended — or record a plus one or a dietary note
  • remove_guest — take the seat back; the person record is untouched

Open loops

  • list_threads — what the member said they would do
  • create_thread — write one down
  • close_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.