Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "invite_links_create"
Create a private invite link for a Space. An open invite link can't protect names Fathom was never given: leave invited people's names out of the purpose and activity text, so that each person's name shows to others only after their own yes.Certificate recorded, valid to 2027-01-18
Authorization not required
Added "activities_add", "activities_answer", "activities_lock_choice" and 10 more; changed the definition of "activities_get_choice", "activities_list_join_requests", "activities_participation" and 27 more (30 tools before, 43 now)
Read an activity'schoice as a member of the Space: each option with its tick count and who ticked it; detailcurrent choicesalso return the field keyandlabel.ticks.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"activityId":{"type":"string" ⟨11 unchanged words⟩
Added "activities_request_to_join", "activities_set_details", "fathom_builder_start" and 5 more; changed the definition of "extensions_list" and "extensions_propose" (22 tools before, 30 now)
List approved extensions, plus your own proposed or rejected proposals. Each of your proposed ones says whether it has been tried (tried) and your next step (next).⟨17 unchanged words⟩ own Space until a person steward reviews it. Use it once on one of your own activities first: that trial is its proof, and the steward cannot accept an ability without one.
Unknown → Live
First tool surface recorded: 22 tools (server version 0.1.0)
https://fathom-lab-door.fly.dev/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Listalljoin requests for the owner oronly your own request as arequester.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"activityId":{"type":"string" ⟨11 unchanged words⟩
Readone activity fortheperson behind this delegated token:person'stheiractivity answer, placestaken, waiting-list positionandany open offer (kind "waiting", or "kept": their place from last time, which only they can take or pass on their own page). Alsooffers. ifOthersCount:how many other members would come if others say they're in(never the person themselves, never names), and for the person's own conditional answer, ifOthers {others, firm}: the N they asked for and how many others have said they're in; an offer of kind"if-met" means theirNis met. "Nwould come if others say they're in") is a count of people who are not ⟨5 unchanged words⟩ coming or tell anyone they will have company.Only the person can say it, take it back, or take or pass the offer it brings. For the Space owner, also the places kept on a repeat: kept, tookIt, passed, notAnswered, released, keptUntil, and keptSummary, the organizer's line word for word.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"activityId":{"type":"string" ⟨11 unchanged words⟩
Ask to joina synthetic group'san activity for your person, only after they ⟨9 unchanged words⟩ activity, all its dates, not one evening.Saves one pending join request and returns its id, status URL, undo code and undoUrl.Give your person the undoUrl: it is their ⟨14 unchanged words⟩ status URL alone can't take the request back.Every person and group in this lab is synthetic: nobody is contacted. The request stays pending until a steward of this lab accepts or declines it; the answer and any words show on its status page. No contact details: an optional first name or nickname only, seen by the steward alone.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"activityId":{"description":"The ⟨44 unchanged words⟩
Attach validated extension values to anactivity as its organizer or AI. A proposed extension is a trial only in the proposer owner's Space; approved extensions may be reused by any Space owner.activity.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"activityId":{"type":"string" ⟨21 unchanged words⟩
Say how interests relate:"serves"(a Space you can readservesan interest),"kind-of","part-of" or,"alias-of" (between two interests).An AI's declaration alwaysIt lands as recommended:it isnever usedfor matchingor shown to members until the steward,as a person,approves it."inferred" can never be declared.Terms areshortplain text, never a person.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"label":{"type":"string" ⟨23 unchanged words⟩
Search thesmallavailable synthetic capability catalog.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"query":{"type":"string" ⟨7 unchanged words⟩
RenderPreview the current trusted experiencemanifest for the caller, with the people-page controls (choose together, I'm in / Maybe / Can't make it) shown read-only in each activity.manifest.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"spaceId":{"type":"string" ⟨7 unchanged words⟩
Validate a declarative experiencemanifest without rendering it.manifest.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"manifest":{},"token":{ ⟨6 unchanged words⟩
List approved extensions,plusand your ownproposed or rejectedproposals.Each of your proposed ones says whether it has been tried (tried) and your next step (next).
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨2 unchanged words⟩
Propose a strict,data-onlyactivity-details extension. It is staged as a trial for the proposer inability;theiritownstaysSpacepending until apersonsteward reviews it.Use it once onTheoneidofmustyournotownnameactivitiesafirsttown:that trial is its proof,abilitiesandworktheinstewardeverycannottown;acceptwhereantheyabilityapplywithoutisone.data.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"closesGap":{"type":"string" ⟨21 unchanged words⟩ fields":{"description":"At most 8 fields.Each has key (^[a-z][a-zA-Z0-9]{0,31}$), label and type: text (with maxLength 1-80), number or range (optional min, max), choice (options), or yesno.","items":{"oneOf":[{"additionalProperties" ⟨94 unchanged words⟩ :"array"},"id":{"description":"Lowercase words joined by dots, e.g. commons.golf-round (pattern ^[a-z0-9]+(\\.[a-z0-9-]+)+$). Ids starting fathom, coreAnoridplatformsuchareasreserved.commons.golf-round.","type":"string"},"kind":{ ⟨4 unchanged words⟩ group's own use; 'commercial' for a business offer.Defaults to commons.","enum":["commons","commercial"], ⟨8 unchanged words⟩ helps a group know, at most 300 characters.No money, no personal data, never a condition for joining.","type":"string"},"title":{ ⟨36 unchanged words⟩
RecordReport astructuredmissingreportcapabilityforandawhymissingitcapability.matters.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"amends":{"type":"string" ⟨24 unchanged words⟩
Withdraw your proposed extension beforereview. The proposer or their AI may withdraw it; withdrawn abilities cannot be used orstewardrendered.review.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"extensionId":{"type":"string" ⟨11 unchanged words⟩
BecomeStart a builderon this lab, to propose an ability and try it. Returns your builderId, a secret token,sandboxandwith aprivatesyntheticsandboxSpacewith one syntheticand activity.Saves one builder (three a day per address). Nothing about a real person is kept.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{},"type":"object"}
FindwhatpublicFathom'splacespublicandlabsynthetichasgroups for an interest in atown, as the plain-text answer of GET /ask (places, synthetic groups to join).town. Read-only.IfPass yourperson gave you theirperson's memory link(from fathom_remember), pass itas memory:groups and activities that fit what they askedtobe remembered come first, with one line saying so. Nothing is removed. A link that isputnotwhattheirsfitschangesthemnothing.first.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"interest":{"description":"The ⟨37 unchanged words⟩ ":5,"minimum":1,"type":"integer"},"question":{"description":"Optional: the person's question in their own words.","maxLength":240,"type":"string"},"town":{"description":"The town ⟨12 unchanged words⟩
Forget a memory:deletes itfor good,when your personasks.asks,Giveusing their ownmemorylink exactly as they have it.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"link":{"description":"Your ⟨16 unchanged words⟩
Only after your person said yes to this exact proposal. Propose a missing place or communitythat is missing from Fathom's public lab, or (kind offer) your person's own sparecapacity, for example a spare kiln shelf on Thursday evenings.capacity. A place needs a source: any https ⟨5 unchanged words⟩ read, your person gave you, or Fathomlisted; a community's source is optional. Saves one pending proposallisted.andIt returnsits id, status URL, undo code andan undoUrl; give your person the undoUrl: it ⟨21 unchanged words⟩ never shown as fact before that. An offeris shown to other visitors as 'A visitor offers …',neverwithsays who:put what is offered in name, add when if they said, andno email, phone, link or address.The same as the web's POST https://fathom-lab-door.fly.dev/proposals.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"interest":{"description":"The ⟨9 unchanged words⟩ :"string"},"kind":{"description":"place (a public page about it is required as the source), community, or offer: aA person's own spare capacity, only with theiryesyes.","enum":["place","community"," ⟨103 unchanged words⟩ required for a place, optional for a community.Never a placeholder or invented address.","maxLength":120,"type":"string"} ⟨21 unchanged words⟩ short words on when, for example Thursday evenings.No contact details.","maxLength":120,"type":"string"} ⟨12 unchanged words⟩ your person said yes to this exact offer.Without it nothing is offered. Ignored for a place or community.","enum":["yes"],"type": ⟨8 unchanged words⟩
Only after your person said yes to this exact proposal.Keep how your person likes to meet,so that you or another AI can bring it back next week without asking again:choices only,no free text. Send keep: "yes"only after your person said yes to beingremembered; without it nothing is kept. Returns your person's own linkremembered (the only way back to the memory): give it to them andsend keepit private. Choose at least one of level (beginner or:experienced"yes"), days.(weekdaysGiveorthemweekends),thetimeprivate(daytimelinkoritevenings).returns.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"description":"Optional: ⟨13 unchanged words⟩ after your person said yes to being remembered.Without it nothing is kept.","enum":["yes"],"type": ⟨27 unchanged words⟩
Readwhat happened toa proposalor a, join request,from the status link your person was given (orits id): pending, accepted, declined with the steward's words, or withdrawn. Or giveyour person's own memorylink (https://…/memories/mem-…?key=…) to see what was kept. Read-only; givebytheits link, given exactly as your person has it.Nothing is saved.Read-only.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"link":{"description":"The ⟨27 unchanged words⟩
TheReaditemsthe places and activities a genesis runhasfoundso far, from position`since` (start at 0, then pass back `next`), with the run's status: which finders are done, and what was missed and why. On the seeded remote lab, omit `run` to read the latest seeded replay. Show each item's source as given.since. Relay the attribution lines and the unclaimed line exactly as returned,never reworded or dropped,andsay which things are 'from a source' and which are only 'suggested'. When you pass a place on to your person,keepitseach place's source link next to itsname, so they can see where it comes from. Knowledge is about places and organisations, never people: never add a person, a phone number, an email, an image or a price.name.
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":{},"properties":{"run":{ ⟨6 unchanged words⟩
TheAnswerlens'whereforcanoneIinterest… inone town: the things tied to the interest by a source, each<town>' withits assertions, where each came from and its attribution. Optional limit (1 to 50, default 20). It onlysourcedreads.places. Relay the attribution lines and the unclaimed line exactly asreturned, never reworded or dropped, and say which things are 'from a source' and which are only 'suggested'.returned. When you pass a place on to your ⟨9 unchanged words⟩ so they can see where it comes from.Knowledge is about places and organisations, never people: never add a person, a phone number, an email, an image or a price.
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":{},"properties":{"interest":{ ⟨7 unchanged words⟩
Read the person's own"Would you go?" answers, the latestprivateperplaceplace.answers.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨2 unchanged words⟩
Describe Fathom,and its safeagent boundary, and thissynthetic labsurface.boundary.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨2 unchanged words⟩
Propose akind ofdata-onlythingkind(orapredicate)the knowledge layerhas no word for. Send name, definition (plain text, at most 500 characters, data only, never instructions), parent (place, event, activity, organisation, concept or community), identity_rule and examples (2 or more: {name, source_url, licence, retrieved_at, existing_kind?, located_in?}); a predicate also needs class "predicate", domain and value_type. Optional labels [{language, text}] for synonyms. The kernel first tries to alignlacks; itto an existing kind and thenanswers "use X",andwhencreatesonenothing.exists. Examples that are peopleare refused, andso is a kindkinds named for a person orarole(a keeper,seller, maker, guide, potter; also in plural and Norwegian). A new kind is provisional and visible only in your lens until independent proposers, sourced atoms and a cold review accept it; its name (never its definition) can still be the "use X" answer to a proposal from another account, so nobody makes a duplicate. If existing kindsareclose in meaning, under any parent, your own included, the answer is "near" with up to 3 candidates (name, parent, labels, status, score, shared words) and nothing is created: call again with use: "<kind>" to support one, or with differs_from: {kind, how} (how: at most 200 characters of plain text) to create yours beside it, which a reviewer then compares. The answer can also be a parent with an attribute instead of a new kind: an event, or an activity, identified like any event (organiser, date, start time) is an event with an activity value; a place identified like any place (location, address) is a place with a facility value. Nothing is created then. If another value is close in meaning, the answer is "near" with value candidates (status "value", with their attribute): use: "<value>" joins it, differs_from: {kind: "<value>", how} makes yours. To make a kind anyway, send differs_from: {kind: "<the parent>", how} naming what it tracks that the parent does not.refused.
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":{},"properties":{"definition":{ ⟨11 unchanged words⟩
Read a Space when itsserver-sidevisibility rules allow it.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"spaceId":{"type":"string" ⟨7 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨2 unchanged words⟩
Readonea kind orpredicate by name (optional class "predicate"): itspredicate's status,parent, identity rule, labelsandhow much evidence it has. A provisional kind shows only to its proposer; its definition shows to others only once it is accepted. It only reads.evidence.
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":{},"properties":{"class":{ ⟨6 unchanged words⟩
Run thefivesteward checks for a viewtrial: grammar and budget, throwaway render, escape, scope, and all five metamorphic relations.trial.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"spaceId":{"type":"string" ⟨18 unchanged words⟩
List approvedviews available for reuse, plusand your own proposedor rejectedviews.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨2 unchanged words⟩
Propose astrict declarative place view. Only repeat, box, text, shape, place and scale(value, domain, range) are accepted; noboundedexecutablesynthetic-placecodevieworforexternalstewarddata.review.
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"token":{"type":"string" ⟨5 unchanged words⟩
Add a synthetic activity to a Space as its owner. Only a person can mark one real.
Refused for AIs: a person's answer to an activity is theirs alone, given on the people page. Tell your person what activities_participation shows; never answer for them.
Lock one option of an open activity choice.
Let the group choose a time, place, or approved ability field, as the Space owner. Text labels come only from a person on the people page.
Tick activity choices only when your person says what works.
Change an activity as its Space owner. Plain text only; an AI may not mark it real.
Apply an owner-approved trusted experience manifest.
Read the full current guidance for a Fathom tool.
Read a private Space as its members see it.
Add one fact to a Space you built: with the https page that states it, or synthetic: "yes" when made up for the plan.
Join a builder's private Space for your person through their invite link, only after your person said yes to joining. Returns their own token for activities_tick_choice and fathom_space.
Create a private invite link for a Space.
Create a synthetic draft Space for the delegated principal.
⟨5 unchanged words⟩ :{"type":"string"},"extension":{"description":"The whole definition as one object { id, version, kind, title, purpose, fields }; or send those fields flat instead."},"fields":{"description":"At most 8 fields. Each has key (^[a-z][a-zA-Z0-9]{0,31}$), label and type: text (with maxLength 1-80), number or range (optional min, max), choice (options), or yesno.","items":{"oneOf":[{"additionalProperties":{},"properties":{"key":{"type":"string"},"label":{"type":"string"},"maxLength":{"type":"number"},"type":{"const":"text","type":"string"}},"required":["key","label","type","maxLength"],"type":"object"},{"additionalProperties":{},"properties":{"key":{"type":"string"},"label":{"type":"string"},"max":{"type":"number"},"min":{"type":"number"},"type":{"enum":["number","range"],"type":"string"}},"required":["key","label","type"],"type":"object"},{"additionalProperties":{},"properties":{"key":{"type":"string"},"label":{"type":"string"},"options":{"items":{"type":"string"},"type":"array"},"type":{"const":"choice","type":"string"}},"required":["key","label","type","options"],"type":"object"},{"additionalProperties":{},"properties":{"key":{"type":"string"},"label":{"type":"string"},"type":{"const":"yesno","type":"string"}},"required":["key","label","type"],"type":"object"}]},"type":"array"},"id":{"description":"Lowercase words joined by dots, e.g. commons.golf-round (pattern ^[a-z0-9]+(\\.[a-z0-9-]+)+$). Ids starting fathom, core or platform are reserved.","type":"string"},"kind":{"description":"'commons' for a group's own use; 'commercial' for a business offer. Defaults to commons.","enum":["commons","commercial"],"type":"string"},"purpose":{"description":"One sentence: what it helps a group know, at most 300 characters. No money, no personal data, never a condition for joining.","type":"string"},"title":{"description":"What it is called, at most 40 characters.","type":"string"},"token":{"type":"string"},"version":{"description":"1 for a new ability; a changed one is the next version.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"numberinteger"}},"type":"object"}
Ask to join a synthetic group's activity for your person, only after they said they want to. It asks to join the activity, all its dates, not one evening. Saves one pending join request and returns its id, status URL, undo code and undoUrl. Give your person the undoUrl: it is their own page for this request, and Withdraw is there. Keep it for them; the status URL alone can't take the request back. Every person and group in this lab is synthetic: nobody is contacted. The request stays pending until a steward of this lab accepts or declines it; the answer and any words show on its status page. …
Attach validated extension values to an activity as its organizer or AI. A proposed extension is a trial only in the proposer owner's Space; approved extensions may be reused by any Space owner.
Become a builder on this lab, to propose an ability and try it. Returns your builderId, a secret token, and a private synthetic sandbox Space with one synthetic activity. Saves one builder (three a day per address). Nothing about a real person is kept.
Find what Fathom's public lab has for an interest in a town, as the plain-text answer of GET /ask (places, synthetic groups to join). Read-only. If your person gave you their memory link (from fathom_remember), pass it as memory: groups and activities that fit what they asked to be remembered come first, with one line saying so. Nothing is removed. A link that is not theirs changes nothing.
Forget a memory: deletes it for good, when your person asks. Give their own memory link exactly as they have it.
Only after your person said yes to this exact proposal. Propose a place or community that is missing from Fathom's public lab, or (kind offer) your person's own spare capacity, for example a spare kiln shelf on Thursday evenings. A place needs a source: any https page about it that you read, your person gave you, or Fathom listed; a community's source is optional. Saves one pending proposal and returns its id, status URL, undo code and undoUrl; give your person the undoUrl: it is their own page for the proposal, and Withdraw is there. It stays pending until a steward reviews it, and is never …
Only after your person said yes to this exact proposal. Keep how your person likes to meet, so that you or another AI can bring it back next week without asking again: choices only, no free text. Send keep: "yes" only after your person said yes to being remembered; without it nothing is kept. Returns your person's own link (the only way back to the memory): give it to them and keep it private. Choose at least one of level (beginner or experienced), days (weekdays or weekends), time (daytime or evenings).
Read what happened to a proposal or a join request, from the status link your person was given (or its id): pending, accepted, declined with the steward's words, or withdrawn. Or give your person's own memory link (https://…/memories/mem-…?key=…) to see what was kept. Read-only; give the link exactly as your person has it. Nothing is saved.