Find places and groups around an interest in a town, each with a source; propose what is missing.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Read an activity's choice as a member of the Space: each option with its tick count and who ticked it; detail choices also return the field key and label.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http fathom https://fathom-lab-door.fly.dev/mcp
Read an activity's choice as a member of the Space: each option with its tick count and who ticked it; detail choices also return the field key and label.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| spaceId* | string | |
| activityId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"spaceId",
"activityId"
],
"properties": {
"token": {
"type": "string"
},
"spaceId": {
"type": "string"
},
"activityId": {
"type": "string"
}
}
}List all join requests for the owner or only your own request as a requester.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| spaceId* | string | |
| activityId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"spaceId",
"activityId"
],
"properties": {
"token": {
"type": "string"
},
"spaceId": {
"type": "string"
},
"activityId": {
"type": "string"
}
}
}Read one activity for the person behind this delegated token: their answer, places taken, waiting-list position and any open offer (kind "waiting", or "kept": their place from last time, which only they can take or pass on their own page). Also 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 their N is met. "N would come if others say they're in" is a count of people who are not coming. Never add it to 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.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| spaceId* | string | |
| activityId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"spaceId",
"activityId"
],
"properties": {
"token": {
"type": "string"
},
"spaceId": {
"type": "string"
},
"activityId": {
"type": "string"
}
}
}Say how interests relate: "serves" (a Space you can read serves an interest), "kind-of", "part-of" or "alias-of" (between two interests). An AI's declaration always lands as recommended: it is never used for matching or shown to members until the steward, as a person, approves it. "inferred" can never be declared. Terms are short plain text, never a person.
| Argument | Type | Description |
|---|---|---|
| label | string | |
| token | string | |
| object* | string | |
| subject* | string | |
| relation* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subject",
"relation",
"object"
],
"properties": {
"label": {
"type": "string"
},
"token": {
"type": "string"
},
"object": {
"type": "string"
},
"subject": {
"type": "string"
},
"relation": {
"enum": [
"kind-of",
"part-of",
"serves",
"alias-of"
],
"type": "string"
}
}
}Search the small synthetic capability catalog.
| Argument | Type | Description |
|---|---|---|
| query* | string | |
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string"
},
"token": {
"type": "string"
}
}
}Render the current trusted experience manifest for the caller, with the people-page controls (choose together, I'm in / Maybe / Can't make it) shown read-only in each activity.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| spaceId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"spaceId"
],
"properties": {
"token": {
"type": "string"
},
"spaceId": {
"type": "string"
}
}
}Validate a declarative experience manifest without rendering it.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| manifest* | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"manifest"
],
"properties": {
"token": {
"type": "string"
},
"manifest": {}
}
}List approved extensions, plus your own proposed or rejected proposals.
| Argument | Type | Description |
|---|---|---|
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"type": "string"
}
}
}Propose a strict, data-only activity-details extension. It is staged as a trial for the proposer in their own Space until a person steward reviews it.
| Argument | Type | Description |
|---|---|---|
| id | string | |
| title | string | |
| token | string | |
| fields | array | |
| purpose | string | |
| version | number | |
| closesGap | string | |
| extension | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"token": {
"type": "string"
},
"fields": {
"type": "array",
"items": {}
},
"purpose": {
"type": "string"
},
"version": {
"type": "number"
},
"closesGap": {
"type": "string"
},
"extension": {}
}
}Record a structured report for a missing capability.
| Argument | Type | Description |
|---|---|---|
| why* | string | |
| need* | string | |
| token | string | |
| amends | string | |
| attempted* | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"need",
"attempted",
"why"
],
"properties": {
"why": {
"type": "string"
},
"need": {
"type": "string"
},
"token": {
"type": "string"
},
"amends": {
"type": "string"
},
"attempted": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
}Withdraw your proposed extension before review. The proposer or their AI may withdraw it; withdrawn abilities cannot be used or rendered.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| version* | number | |
| extensionId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"extensionId",
"version"
],
"properties": {
"token": {
"type": "string"
},
"version": {
"type": "number"
},
"extensionId": {
"type": "string"
}
}
}The items a genesis run has found so 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. Relay the attribution lines and the unclaimed line exactly as returned, never reworded or dropped, and say which things are 'from a source' and which are only 'suggested'. Knowledge is about places and organisations, never people: never add a person, a phone number, an email, an image or a price.
| Argument | Type | Description |
|---|---|---|
| run | any | |
| since | any | |
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"run": {},
"since": {},
"token": {
"type": "string"
}
},
"additionalProperties": {}
}The lens for one interest in one town: the things tied to the interest by a source, each with its assertions, where each came from and its attribution. Optional limit (1 to 50, default 20). It only reads. Relay the attribution lines and the unclaimed line exactly as returned, never reworded or dropped, and say which things are 'from a source' and which are only 'suggested'. Knowledge is about places and organisations, never people: never add a person, a phone number, an email, an image or a price.
| Argument | Type | Description |
|---|---|---|
| town | any | |
| limit | any | |
| token | string | |
| interest | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"town": {},
"limit": {},
"token": {
"type": "string"
},
"interest": {}
},
"additionalProperties": {}
}Read the person's own "Would you go?" answers, the latest per place.
| Argument | Type | Description |
|---|---|---|
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"type": "string"
}
}
}Describe Fathom, its safe agent boundary, and this lab surface.
| Argument | Type | Description |
|---|---|---|
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"type": "string"
}
}
}Propose a kind of thing (or a predicate) the knowledge layer has 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 align it to an existing kind and then answers "use X", and creates nothing. Examples that are people are refused, and so is a kind named for a person or a role (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 kinds are close 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.
| Argument | Type | Description |
|---|---|---|
| use | any | |
| name | any | |
Read a Space when its server-side visibility rules allow it.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| spaceId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"spaceId"
],
"properties": {
"token": {
"type": "string"
},
"spaceId": {
"type": "string"
}
}
}List public synthetic Spaces visible to the caller.
| Argument | Type | Description |
|---|---|---|
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"type": "string"
}
}
}Read one kind or predicate by name (optional class "predicate"): its status, parent, identity rule, labels and how 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.
| Argument | Type | Description |
|---|---|---|
| name | any | |
| class | any | |
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {},
"class": {},
"token": {
"type": "string"
}
},
"additionalProperties": {}
}Run the five steward checks for a view trial: grammar and budget, throwaway render, escape, scope, and all five metamorphic relations.
| Argument | Type | Description |
|---|---|---|
| token | string | |
| viewId* | string | |
| spaceId | string | |
| version* | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"viewId",
"version"
],
"properties": {
"token": {
"type": "string"
},
"viewId": {
"type": "string"
},
"spaceId": {
"type": "string"
},
"version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
}
}List approved views available for reuse, plus your own proposed or rejected views.
| Argument | Type | Description |
|---|---|---|
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"token": {
"type": "string"
}
}
}Propose a strict declarative place view. Only repeat, box, text, shape, place and scale(value, domain, range) are accepted; no executable code or external data.
| Argument | Type | Description |
|---|---|---|
| view* | any | |
| token | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"view"
],
"properties": {
"view": {},
"token": {
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 1, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| token |
| string |
| parent | any |
| examples | any |
| definition | any |
| differs_from | any |
| identity_rule | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"use": {},
"name": {},
"token": {
"type": "string"
},
"parent": {},
"examples": {},
"definition": {},
"differs_from": {},
"identity_rule": {}
},
"additionalProperties": {}
}