Skip to content

Fathom (lab)

dev.fly.fathom-lab-door/fathomfathom-lab-door.fly.devstreamable-httpv0.1.0Scanned

Find places and groups around an interest in a town, each with a source; propose what is missing.

22 tools: 1 do something that can't be undone, 8 change things and 13 only read.

Tools: 0 delete, 1 irreversible, 8 write, 13 read.
  • Reads private data · 0
  • Reads text others write · 0
  • Can send data out · 0
  • No findings

Anlyon alternative

9 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

22 tools

Can't be undone 1Claude Code: ask
  • extensions_withdrawWithdraw your proposed extension before review.No findings

    Why it is in this group

    • The name "extensions_withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Withdraw your proposed extension before review. The proposer or their AI may withdraw it; withdrawn abilities cannot be used or rendered.
Changes things 8Claude Code: ask
  • affiliations_declareSay how interests relate: "serves" (a Space you can read serves an interest), "kind-of", "part-of" or "alias-of" (between two interests).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • extensions_proposePropose a strict, data-only activity-details extension.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • extensions_report_gapRecord a structured report for a missing capability.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Record a structured report for a missing capability.
  • genesis_itemsThe 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • knowledge_lensThe 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.
  • propose_typePropose a kind of thing (or a predicate) the knowledge layer has no word for.No findings

    Why it is in this group

    • The name "propose_type" says "type": a word for a change.
    Description, as the server wrote it
    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.
  • type_statusRead one kind or predicate by name (optional class "predicate"): its status, parent, identity rule, labels and how much evidence it has.No findings

    Why it is in this group

    • The name "type_status" says "type": a word for a change.
    Description, as the server wrote it
    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.
  • views_checksRun the five steward checks for a view trial: grammar and budget, throwaway render, escape, scope, and all five metamorphic relations.No findings

    Why it is in this group

    • The name "views_checks" says "view": a word for reading.
    • The description's first verb is "run": a word for a change.
    Description, as the server wrote it
    Run the five steward checks for a view trial: grammar and budget, throwaway render, escape, scope, and all five metamorphic relations.
Only reads 13Show 13 read-only tools
  • activities_get_choiceRead 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.No findings

    Why it is in this group

    • The name "activities_get_choice" says "get": a word for reading.
    Description, as the server wrote 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.
  • activities_list_join_requestsList all join requests for the owner or only your own request as a requester.No findings

    Why it is in this group

    • The name "activities_list_join_requests" says "list": a word for reading.
    Description, as the server wrote it
    List all join requests for the owner or only your own request as a requester.
  • activities_participationRead 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…No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    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.
  • experiences_previewRender 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.No findings

    Why it is in this group

    • The name "experiences_preview" says "preview": a word for reading.
    Description, as the server wrote it
    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.
  • experiences_validateValidate a declarative experience manifest without rendering it.No findings

    Why it is in this group

    • The name "experiences_validate" says "validate": a word for reading.
    Description, as the server wrote it
    Validate a declarative experience manifest without rendering it.
  • extensions_listList approved extensions, plus your own proposed or rejected proposals.No findings

    Why it is in this group

    • The name "extensions_list" says "list": a word for reading.
    Description, as the server wrote it
    List approved extensions, plus your own proposed or rejected proposals.
  • places_verdictsRead the person's own "Would you go?" answers, the latest per place.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read the person's own "Would you go?" answers, the latest per place.
  • platform_describeDescribe Fathom, its safe agent boundary, and this lab surface.No findings

    Why it is in this group

    • The name "platform_describe" says "describe": a word for reading.
    Description, as the server wrote it
    Describe Fathom, its safe agent boundary, and this lab surface.
  • spaces_getRead a Space when its server-side visibility rules allow it.No findings

    Why it is in this group

    • The name "spaces_get" says "get": a word for reading.
    Description, as the server wrote it
    Read a Space when its server-side visibility rules allow it.
  • spaces_list_publicList public synthetic Spaces visible to the caller.No findings

    Why it is in this group

    • The name "spaces_list_public" says "list": a word for reading.
    Description, as the server wrote it
    List public synthetic Spaces visible to the caller.
  • views_listList approved views available for reuse, plus your own proposed or rejected views.No findings

    Why it is in this group

    • The name "views_list" says "view": a word for reading.
    Description, as the server wrote it
    List approved views available for reuse, plus your own proposed or rejected views.
  • views_proposePropose a strict declarative place view.No findings

    Why it is in this group

    • The name "views_propose" says "view": a word for reading.
    Description, as the server wrote it
    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.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or untrusted-input or outbound.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write0
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http fathom https://fathom-lab-door.fly.dev/mcp
claude mcp add --transport http fathom https://fathom-lab-door.fly.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__fathom__platform_describe",
      "mcp__fathom__capabilities_search",
      "mcp__fathom__spaces_get",
      "mcp__fathom__spaces_list_public",
      "mcp__fathom__places_verdicts",
      "mcp__fathom__extensions_list",
      "mcp__fathom__views_propose",
      "mcp__fathom__views_list",
      "mcp__fathom__activities_list_join_requests",
      "mcp__fathom__activities_participation",
      "mcp__fathom__activities_get_choice",
      "mcp__fathom__experiences_validate",
      "mcp__fathom__experiences_preview"
    ],
    "ask": [
      "mcp__fathom__affiliations_declare",
      "mcp__fathom__genesis_items",
      "mcp__fathom__knowledge_lens",
      "mcp__fathom__propose_type",
      "mcp__fathom__type_status",
      "mcp__fathom__extensions_report_gap",
      "mcp__fathom__extensions_propose",
      "mcp__fathom__extensions_withdraw",
      "mcp__fathom__views_checks"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as fathom. Review it before you use it.

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/dev.fly.fathom-lab-door/fathom/verify?hash=29bd1562657be37ad37664031bf909abc0b5bdc4e5dc0a6562dd923525f36900" | jq -e '.changed == false'

Pinned hash 29bd1562657b, from Nov 1, 2026, 11:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/dev.fly.fathom-lab-door/fathom/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for dev.fly.fathom-lab-door/fathom
[![anlyon.dev](https://anlyon.dev/badge/dev.fly.fathom-lab-door/fathom.svg)](https://anlyon.dev/servers/dev.fly.fathom-lab-door/fathom)

Source: MCP Registry. Synced Nov 1, 2026, 11:17 UTC.