# Fathom (lab) (remote · fathom-lab-door.fly.dev)

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

- Trust score: 63/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Recent critical change**: Authorization (2026-11-02). See the changelog below before you install this server.

## Components

- remote · `fathom-lab-door.fly.dev`: 63/100 (this document), [markdown](https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door.md), [page](https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door)

## Channel facts

- Endpoint: `https://fathom-lab-door.fly.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (fathom_forget).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 71/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 3201 tokens (~71/item across 45 items; 43 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability check failed: schema churn in the 4 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 21 additions.
- **Tool Coverage**: 75/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 25% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 45 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Fathom (lab) MCP server?

Fathom (lab) is a hosted endpoint at https://fathom-lab-door.fly.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

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

### Cursor

```json
{
  "mcpServers": {
    "dev-fly-fathom-lab-door-fathom": {
      "url": "https://fathom-lab-door.fly.dev/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dev-fly-fathom-lab-door-fathom": {
      "type": "http",
      "url": "https://fathom-lab-door.fly.dev/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.dev-fly-fathom-lab-door-fathom]
url = "https://fathom-lab-door.fly.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-fly-fathom-lab-door-fathom": {
      "type": "remote",
      "url": "https://fathom-lab-door.fly.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-fly-fathom-lab-door-fathom --url 'https://fathom-lab-door.fly.dev/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-fly-fathom-lab-door-fathom:
    url: "https://fathom-lab-door.fly.dev/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "dev-fly-fathom-lab-door-fathom": {
      "Transport": "http",
      "Url": "https://fathom-lab-door.fly.dev/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add dev-fly-fathom-lab-door-fathom -t streamable-http -u 'https://fathom-lab-door.fly.dev/mcp'
```

### Other

```json
{
  "mcpServers": {
    "dev-fly-fathom-lab-door-fathom": {
      "type": "http",
      "url": "https://fathom-lab-door.fly.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 63, +1)

- [security] Tool “invite_links_create” rewrote its description, which is the text the model reads

### 2026-11-03 (score 62, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “activities_answer”, which the server declares destructive
- [security] New tool “activities_lock_choice”, which the server declares destructive
- [security] New tool “activities_update”, which the server declares destructive
- [security] New tool “experiences_apply”, which the server declares destructive
- [security] Tool “activities_get_choice” rewrote its description, which is the text the model reads
- [security] Tool “activities_list_join_requests” rewrote its description, which is the text the model reads
- [security] Tool “activities_participation” rewrote its description, which is the text the model reads
- [security] Tool “activities_request_to_join” rewrote its description, which is the text the model reads
- [security] Tool “activities_set_details” rewrote its description, which is the text the model reads
- [security] Tool “affiliations_declare” rewrote its description, which is the text the model reads
- [security] Tool “capabilities_search” rewrote its description, which is the text the model reads
- [security] Tool “experiences_preview” rewrote its description, which is the text the model reads
- [security] Tool “experiences_validate” rewrote its description, which is the text the model reads
- [security] Tool “extensions_list” rewrote its description, which is the text the model reads
- [security] Tool “extensions_propose” rewrote its description, which is the text the model reads
- [security] Tool “extensions_report_gap” rewrote its description, which is the text the model reads
- [security] Tool “extensions_withdraw” rewrote its description, which is the text the model reads
- [security] Tool “fathom_builder_start” rewrote its description, which is the text the model reads
- [security] Tool “fathom_find” rewrote its description, which is the text the model reads
- [security] Tool “fathom_forget” rewrote its description, which is the text the model reads
- [security] Tool “fathom_propose” rewrote its description, which is the text the model reads
- [security] Tool “fathom_remember” rewrote its description, which is the text the model reads
- [security] Tool “fathom_status” rewrote its description, which is the text the model reads
- [security] Tool “genesis_items” rewrote its description, which is the text the model reads
- [security] Tool “knowledge_lens” rewrote its description, which is the text the model reads
- [security] Tool “places_verdicts” rewrote its description, which is the text the model reads
- [security] Tool “platform_describe” rewrote its description, which is the text the model reads
- [security] Tool “propose_type” rewrote its description, which is the text the model reads
- [security] Tool “spaces_get” rewrote its description, which is the text the model reads
- [security] Tool “type_status” rewrote its description, which is the text the model reads
- [security] Tool “views_checks” rewrote its description, which is the text the model reads
- [security] Tool “views_list” rewrote its description, which is the text the model reads
- [security] Tool “views_propose” rewrote its description, which is the text the model reads
- [functional regression] Tool coverage: 31% → 25%
- [functional improvement] Schema quality: fail → pass
- [functional] New tool “activities_add”
- [functional] New tool “activities_offer_choice”
- [functional] New tool “activities_tick_choice”
- [functional] New tool “fathom_help”
- [functional] New tool “fathom_space”
- [functional] New tool “fathom_space_context”
- [functional] New tool “fathom_space_join”
- [functional] New tool “invite_links_create”
- [functional] New tool “spaces_create_draft”
- [cosmetic] “fathom_find” added an optional parameter “question”
- [cosmetic] “extensions_propose” reworded the description of “fields”
- [cosmetic] “extensions_propose” reworded the description of “id”
- [cosmetic] “extensions_propose” reworded the description of “kind”
- [cosmetic] “extensions_propose” reworded the description of “purpose”
- [cosmetic] “fathom_propose” reworded the description of “kind”
- [cosmetic] “fathom_propose” reworded the description of “source”
- [cosmetic] “fathom_propose” reworded the description of “when”
- [cosmetic] “fathom_propose” reworded the description of “yes”
- [cosmetic] “fathom_remember” reworded the description of “keep”

### 2026-11-02 (score 62, +3)

- [critical regression] Authorization: unverified → fail
- [security regression] Stability: unverified → fail
- [security regression] A breaking change shipped without a version bump: still 0.1.0
- [security] New tool “activities_set_details”, which the server declares destructive
- [security] New tool “fathom_forget”, which the server declares destructive
- [security] Tool “extensions_list” rewrote its description, which is the text the model reads
- [security] Tool “extensions_propose” rewrote its description, which is the text the model reads
- [security] Tool “genesis_items” rewrote its description, which is the text the model reads
- [security] Tool “knowledge_lens” rewrote its description, which is the text the model reads
- [security] Tool “extensions_withdraw” is now declared destructive
- [functional regression] Schema quality: pass → fail
- [functional regression] “extensions_propose” changed the type of “version”: number → integer
- [functional improvement] Tool coverage: 0% → 31%
- [functional] Destructive annotations: All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
- [functional] New tool “activities_request_to_join”
- [functional] New tool “fathom_builder_start”
- [functional] New tool “fathom_find”
- [functional] New tool “fathom_propose”
- [functional] New tool “fathom_remember”
- [functional] New tool “fathom_status”
- [cosmetic] “extensions_propose” added an optional parameter “kind”
- [cosmetic] “extensions_propose” reworded the description of “extension”
- [cosmetic] “extensions_propose” reworded the description of “fields”
- [cosmetic] “extensions_propose” reworded the description of “id”
- [cosmetic] “extensions_propose” reworded the description of “purpose”
- [cosmetic] “extensions_propose” reworded the description of “title”
- [cosmetic] “extensions_propose” reworded the description of “version”

### 2026-11-01 (score 59)

First indexed and scored.

## MCP tools (43)

### `fathom_find` (~122 tokens)

Find public places and synthetic groups for an interest in a town. Read-only. Pass your person's memory link as memory to put what fits them first.

Input parameters:

- `interest` (string, required): The interest, for example pottery or klatring.
- `memory` (string): Optional: your person's own memory link, exactly as they have it.
- `page` (integer): Optional: page of ten places, from 1.
- `question` (string): Optional: the person's question in their own words.
- `town` (string, required): The town, for example Oslo.

### `activities_request_to_join` (~134 tokens)

Ask to join an activity for your person, only after they said they want to. It asks to join the activity, all its dates, not one evening. 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.

Input parameters:

- `activityId` (string, required): The activity id, from /ask or spaces_get.
- `name` (string): Optional first name or nickname; no email, phone or link.
- `spaceId` (string, required): The group id, from /ask or spaces_list_public.

### `fathom_status` (~81 tokens)

Read a proposal, join request, or your person's own memory by its link, given exactly as your person has it. Read-only.

Input parameters:

- `link` (string, required): The status link, for example https://…/proposals/prop-1 or https://…/joins/join-1, or just its id; or your person's own memory link.

### `fathom_propose` (~357 tokens)

Only after your person said yes to this exact proposal. Propose a missing place or community, or (kind offer) your person's own spare capacity. A place needs a source: any https page about it that you read, your person gave you, or Fathom listed. It returns an 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 shown as fact before that. An offer never says who: no email, phone, link or address.

Input parameters:

- `interest` (string, required): The interest it serves, for example pottery.
- `kind` (string, required): A person's own spare capacity, only with their yes.
- `name` (string, required): Its name; for an offer, what is offered, for example a spare kiln shelf.
- `newTown` (string): Only when your person confirmed a real town the lab does not cover yet.
- `note` (string): Optional: one line on why it fits.
- `said_as` (string): Optional: the word your person used for the interest, when it differs (for example klatring); the interest is stored as the matched one.
- `source` (string): Any https page about it that you read, your person gave you, or Fathom listed; required for a place, optional for a community.
- `town` (string, required): The town it is in, for example Oslo.
- `when` (string): Only for an offer: optional short words on when, for example Thursday evenings.
- `yes` (string): Required for an offer (kind offer), and sent only after your person said yes to this exact offer.

### `fathom_remember` (~99 tokens)

Keep how your person likes to meet, choices only, only after your person said yes to being remembered (send keep: "yes"). Give them the private link it returns.

Input parameters:

- `days` (string): Optional: weekdays or weekends.
- `keep` (string, required): Send yes only after your person said yes to being remembered.
- `level` (string): Optional: beginner or experienced.
- `time` (string): Optional: daytime or evenings.

### `fathom_forget` (~58 tokens)

Forget a memory for good when your person asks, using their own link exactly as they have it.

Input parameters:

- `link` (string, required): Your person's own memory link, for example https://…/memories/mem-…?key=…

### `fathom_space_join` (~102 tokens)

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.

Input parameters:

- `invite` (string, required): The whole invitation link (…/join/…), or its token.
- `name` (string, required): The first name or nickname your person wants the others to see.
- `yes` (string, required): Send yes only after your person said yes to joining.

### `fathom_space_context` (~101 tokens)

Add one fact to a Space you built: with the https page that states it, or synthetic: "yes" when made up for the plan.

Input parameters:

- `fact` (string, required): One fact, plain text.
- `source` (string): The https page that states the fact.
- `spaceId` (string, required)
- `synthetic` (string): yes when the fact is made up for this plan.
- `token` (string, required): Your builder token.

### `fathom_space` (~48 tokens)

Read a private Space as its members see it.

Input parameters:

- `spaceId` (string, required)
- `token` (string, required): A builder token, or a person's own token from fathom_space_join.

### `fathom_builder_start` (~21 tokens)

Start a builder sandbox with a synthetic Space and activity.

### `fathom_help` (~33 tokens)

Read the full current guidance for a Fathom tool.

Input parameters:

- `tool` (string, required): The tool name to explain.

### `platform_describe` (~27 tokens)

Describe Fathom and its safe synthetic lab boundary.

Input parameters:

- `token` (string)

### `capabilities_search` (~29 tokens)

Search the available synthetic capability catalog.

Input parameters:

- `query` (string, required)
- `token` (string)

### `spaces_create_draft` (~48 tokens)

Create a synthetic draft Space for the delegated principal.

Input parameters:

- `purpose` (string, required)
- `token` (string)
- `town` (string)
- `visibility` (string, required)

### `spaces_get` (~33 tokens)

Read a Space when its visibility rules allow it.

Input parameters:

- `spaceId` (string, required)
- `token` (string)

### `spaces_list_public` (~25 tokens)

List public synthetic Spaces visible to the caller.

Input parameters:

- `token` (string)

### `places_verdicts` (~25 tokens)

Read the person's own private place answers.

Input parameters:

- `token` (string)

### `affiliations_declare` (~87 tokens)

Say how interests relate (serves, kind-of, part-of, alias-of). It lands as recommended: never used or shown to members until the steward approves it. Terms are plain text, never a person.

Input parameters:

- `label` (string)
- `object` (string, required)
- `relation` (string, required)
- `subject` (string, required)
- `token` (string)

### `genesis_items` (~64 tokens)

Read the places and activities a genesis run found, from position since. Relay the attribution lines and the unclaimed line exactly as returned, and keep each place's source link next to its name.

Input parameters:

- `run`
- `since`
- `token` (string)

### `knowledge_lens` (~86 tokens)

Answer 'where can I … in <town>' with sourced places. Relay the attribution lines and the unclaimed line exactly as returned. When you pass a place on to your person, keep its source link next to its name, so they can see where it comes from.

Input parameters:

- `interest`
- `limit`
- `token` (string)
- `town`

### `propose_type` (~92 tokens)

Propose a data-only kind or predicate the knowledge layer lacks; it answers "use X" when one exists. Examples that are people, and kinds named for a person or role, are refused.

Input parameters:

- `definition`
- `differs_from`
- `examples`
- `identity_rule`
- `name`
- `parent`
- `token` (string)
- `use`

### `type_status` (~35 tokens)

Read a kind or predicate's status and evidence.

Input parameters:

- `class`
- `name`
- `token` (string)

### `extensions_report_gap` (~52 tokens)

Report a missing capability and why it matters.

Input parameters:

- `amends` (string)
- `attempted` (required)
- `need` (string, required)
- `token` (string)
- `why` (string, required)

### `extensions_propose` (~201 tokens)

Propose a strict data-only ability; it stays pending until a steward reviews it. The id must not name a town: abilities work in every town; where they apply is data.

Input parameters:

- `closesGap` (string)
- `extension`: The whole definition as one object { id, version, kind, title, purpose, fields }; or send those fields flat instead.
- `fields` (array): At most 8 fields.
- `id` (string): An id such as commons.golf-round.
- `kind` (string): 'commons' for a group's own use; 'commercial' for a business offer.
- `purpose` (string): One sentence: what it helps a group know, at most 300 characters.
- `title` (string): What it is called, at most 40 characters.
- `token` (string)
- `version` (integer): 1 for a new ability; a changed one is the next version.

### `extensions_list` (~23 tokens)

List approved extensions and your own proposals.

Input parameters:

- `token` (string)

### `extensions_withdraw` (~39 tokens)

Withdraw your proposed extension before steward review.

Input parameters:

- `extensionId` (string, required)
- `token` (string)
- `version` (number, required)

### `views_propose` (~32 tokens)

Propose a bounded synthetic-place view for steward review.

Input parameters:

- `token` (string)
- `view` (required)

### `views_checks` (~47 tokens)

Run the steward checks for a view trial.

Input parameters:

- `spaceId` (string)
- `token` (string)
- `version` (integer, required)
- `viewId` (string, required)

### `views_list` (~23 tokens)

List approved and your own proposed views.

Input parameters:

- `token` (string)

### `activities_set_details` (~60 tokens)

Attach validated extension values to an activity.

Input parameters:

- `activityId` (string, required)
- `extensionId` (string, required)
- `spaceId` (string, required)
- `token` (string)
- `values` (required)
- `version` (number, required)

### `activities_add` (~155 tokens)

Add a synthetic activity to a Space as its owner. Only a person can mark one real.

Input parameters:

- `bring` (array)
- `concernRole` (string)
- `description` (string)
- `finding` (string)
- `firstTime` (string)
- `groundRules` (array)
- `level` (string)
- `offerWindowHours` (integer)
- `offerWindowMs` (integer)
- `places` (integer)
- `provenance` (string, required)
- `spaceId` (string, required)
- `title` (string, required)
- `token` (string)
- `when` (string, required)
- `where` (string, required)
- `whoFor` (string)

### `activities_list_join_requests` (~42 tokens)

List join requests for the owner or requester.

Input parameters:

- `activityId` (string, required)
- `spaceId` (string, required)
- `token` (string)

### `activities_answer` (~82 tokens)

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.

Input parameters:

- `activityId` (string, required)
- `answer` (string, required)
- `others` (integer)
- `spaceId` (string, required)
- `token` (string)

### `activities_participation` (~79 tokens)

Read the person's activity answer, places and offers. ifOthersCount ("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.

Input parameters:

- `activityId` (string, required)
- `spaceId` (string, required)
- `token` (string)

### `activities_offer_choice` (~99 tokens)

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.

Input parameters:

- `activityId` (string, required)
- `extensionId` (string)
- `field` (string)
- `kind` (string, required)
- `options` (array)
- `spaceId` (string, required)
- `token` (string)
- `version` (number)

### `activities_get_choice` (~41 tokens)

Read an activity's current choices and ticks.

Input parameters:

- `activityId` (string, required)
- `spaceId` (string, required)
- `token` (string)

### `activities_lock_choice` (~49 tokens)

Lock one option of an open activity choice.

Input parameters:

- `activityId` (string, required)
- `optionId` (string, required)
- `spaceId` (string, required)
- `token` (string)

### `activities_update` (~132 tokens)

Change an activity as its Space owner. Plain text only; an AI may not mark it real.

Input parameters:

- `activityId` (string, required)
- `bring` (array)
- `concernRole` (string)
- `description` (string)
- `finding` (string)
- `firstTime` (string)
- `groundRules` (array)
- `provenance` (string)
- `spaceId` (string, required)
- `title` (string)
- `token` (string)
- `when` (string)
- `where` (string)
- `whoFor` (string)

### `invite_links_create` (~73 tokens)

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.

Input parameters:

- `spaceId` (string, required)
- `token` (string)

### `experiences_validate` (~27 tokens)

Validate a declarative experience manifest.

Input parameters:

- `manifest` (required)
- `token` (string)

### `experiences_apply` (~36 tokens)

Apply an owner-approved trusted experience manifest.

Input parameters:

- `manifest` (required)
- `spaceId` (string, required)
- `token` (string)

### `experiences_preview` (~30 tokens)

Preview the current trusted experience manifest.

Input parameters:

- `spaceId` (string, required)
- `token` (string)

### `activities_tick_choice` (~77 tokens)

Tick activity choices only when your person says what works.

Input parameters:

- `activityId` (string, required)
- `optionIds` (array, required): The option ids that work for your person (from fathom_space or activities_get_choice).
- `spaceId` (string, required)
- `token` (string, required): Your person's own token from fathom_space_join.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door#diagnostics

## Score history

- 2026-11-05: 63
- 2026-11-04: 63
- 2026-11-03: 62
- 2026-11-02: 62
- 2026-11-01: 59

## Common questions

### What is the Fathom (lab) MCP server?

Fathom (lab) is an MCP server listed in the public MCP registry as dev.fly.fathom-lab-door/fathom. Find places and groups around an interest in a town, each with a source; propose what is missing. This page covers its hosted endpoint (https://fathom-lab-door.fly.dev/mcp).

### Is the Fathom (lab) MCP server safe to use?

Fathom (lab) scores 63 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Fathom (lab) MCP server expose?

Fathom (lab) exposes 43 tools: fathom_find, activities_request_to_join, fathom_status, fathom_propose, fathom_remember, and 38 more. Their descriptions and schemas cost roughly 3,106 tokens of context every time the server is loaded.

### Does the Fathom (lab) MCP server require authentication?

No. We connected to Fathom (lab) without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Fathom (lab) MCP server still maintained?

Fathom (lab) is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://fathom-lab-door.fly.dev/mcp
- Website: https://fathom-lab-door.fly.dev/
- Changelog RSS feed: https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door.json
- HTML version of this page: https://verifymcp.io/servers/dev-fly-fathom-lab-door-fathom/fathom-lab-door
