MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Other

Catalyst evidence graph

Findings on what compounds and supplements do in the body, with evidence strength, quote and paper.

Checks passed
16 / 22

0 failed · 6 not measured

Median response
699 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
7

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
103
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
501

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 641 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name catalyst-evidence-graph.

  • Pass
    Lists tools

    tools/list returned 7 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 699 ms over 2 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 751 ms over 2 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    2 of 2 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Pass
    Stable tool list

    No tool was removed and no required parameter was added in the last 30 days.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    24 of 24 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-10-04T20:43:24.132127Z, within 180 days.

  • Pass
    Open-source licence

    GitHub reports an OSI licence.

Start using Catalyst evidence graph

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http catalyst-evidence-graph https://catalystproject.ai/mcp

Capabilities

Tools 7

find_evidence

Answers "what does X do?" and "does X affect Y?" for a supplement, nutrient, drug, food compound or plant (for example "does magnesium help sleep?", "what is creatine shown to do?", "omega-3 and triglycerides"). Pass the substance as query and the effect or outcome asked about, if there is one, as about. When the person names two substances ("is creatine safe with caffeine"), pass one as query and the other as about, in one call; findings about the pair together come back under in_combination. It resolves the name to the node that has findings and returns up to limit findings (default 10), strongest evidence first, each with its evidence strength in words, the study design, the quote, the paper, a permalink and a citation to quote as it stands. total_findings counts every match. The result is complete for the query: another wording of the same substance resolves to the same node, so do not call again to rephrase. Call again only to narrow (evidence_strength, about), to raise limit (at most 50), or to ask about something else. Without about, summary lists everything the node has findings about. If matched is null, or total_findings is 0, Catalyst has recorded no findings on it. That is a complete answer: say so, and do not answer from memory as though from Catalyst. Try search_nodes only when other_matches or summary shows a node the person plausibly meant. An evidence strength says how well the evidence supports a finding and is not a recommendation. For what a compound can become, use reach; for reference-database relations, use get_relations.

Discovered
get_finding

Explains one finding by its finding id: the claim, its evidence strength and what that level means, the verbatim quote, the study design and the paper, and evidence_strength_reasons, each rule that set the level in order, and what the assessment does not weigh. The finding id is 26 characters, from the id field of a find_evidence or get_findings finding, or the last part of its permalink (/e/{id}). Use it to answer why the evidence behind a finding is as strong as it is, from evidence_strength_reasons and never by guessing. To find findings, use find_evidence or get_findings; this tool takes no name. A head-to-head comparison id returns a sentence naming the page that shows the comparison, not a finding.

Discovered
get_findings

Lists the curated study findings for one node by id, from search_nodes: for a compound, organism or material, what it has been shown to affect; for an outcome, which compounds have been studied against it. Use it to browse a node by id. For a question in words, such as "does X help Y", find_evidence answers in one call and needs no id. summary has one row per thing the node has findings about, counted over all its findings and not only the rows returned. The default number of findings, strongest first, is enough to answer. There is no offset: to see a different slice, pass about (an id from summary, or words such as "sleep") or evidence_strength. Each finding carries its evidence strength, one of five named levels from strong to insufficient (strong, moderate, limited, very_limited, insufficient), the verbatim sentence it was drawn from, the paper, the population and dose, and a permalink. An evidence strength says how well the evidence supports the finding and is not a recommendation; give it with the claim, and link the permalink. An empty list means no findings are recorded for that node, a complete answer that does not show the compound does nothing; empty_means says why.

Discovered
get_reactions

Lists the biochemical reactions from Rhea and Human-GEM that a compound is a substrate or product of, or that a protein (enzyme) catalyses or transports, by node id from search_nodes. It lists reactions and does not answer a route question: for "can X become Y" or "what can X become", use reach. Every row is assertion_class 'inferred': a reaction two public databases record, not a result anyone measured in a person. Present these as known biochemistry, never as an effect a compound has, and never as a recommendation. For effects, use find_evidence. Returns total and up to limit reactions (default 10), each with its equation, its participants by side, id and label, the first five enzymes with catalyst_count for all of them, and its source; offset pages the rest, and the default is enough to answer. A page too large for one result is cut to fit, and truncated with next_offset says how to get the rest. A compound flagged is_hub (water, ATP, protons and the like) returns its reaction count only, because it takes part in nearly every reaction. Coverage is one Rhea release and one Human-GEM release; a participant that is not a node in this graph is listed with a null id, and only human enzymes that are nodes are listed. An empty result means no reaction in those releases names this node. That is a complete answer and does not show the body has none.

Discovered
get_relations

Lists what public reference databases (Reactome, UniProt, Rhea, ChEBI and others) record about one node by id, from search_nodes: transporters, enzymes, pathways, expression. Every row is assertion_class 'inferred': a hypothesis about how a compound could act, not a result anyone measured in people. Present these as possible mechanisms and never as effects. For effects, use find_evidence. For the reactions a compound or enzyme takes part in, use get_reactions; for what a compound can become, use reach. predicate limits the list to one relation type, named as in the predicate field of a row (for example transported_by for transporters, metabolized_by for enzymes). Returns total and up to limit rows (default 10); offset pages the rest, and the default is enough to answer. A page too large for one result is cut to fit, and truncated with next_offset says how to get the rest. An empty list with a predicate means the databases record no relation of that type for this node. That is a complete answer, so do not repeat the call with the same predicate. Leave predicate out once only when the person asked broadly and you need to see which types the node has.

Discovered
reach

Answers a route question: "can X become Y in the body" (give from_id and to_id) and "what can X become" (give only from_id). Both ids are compound node ids from search_nodes, so a question that names two compounds needs one search_nodes call for each first. It searches the reactions two public databases (Rhea, Human-GEM) record, up to depth steps (1 to 3, default 3), and returns the routes with the reactions and enzymes along each. Every route is assertion_class 'inferred': a hypothesis drawn from reference databases, never a measured or reported effect. Present it as known biochemical connectivity, never as an effect, a recommendation, or a claim that the body actually does this. For measured effects, use find_evidence. Common cofactors and currency species (water, ATP, protons and the like) are not used as intermediate steps, so a route never reads 'reaches everything through ATP'. A currency species given as from_id or to_id returns reachable: null with a coverage note, not a checked 0 routes. With from_id alone it lists up to limit routes (default 10, offset pages the rest); a page too large for one result is cut to fit, and truncated with next_offset says how to get the rest. When no route is found, the coverage field says which of three cases it is: reachability has not been built for this scope yet, so nothing was checked; it was checked and no route exists through the reactions loaded, which does not mean the body cannot make it; or the compound is a currency species and was never searched. The answer is in that one result; another tool does not check it again.

Discovered
search_nodes

Looks up the node id for a compound, protein, organism or outcome by name or synonym (for example "CoQ10", "caffeine", "CYP1A2", "sleep"). Use it to get the id that get_findings, get_finding, get_relations, get_reactions and reach take; for a question about what a substance does, call find_evidence instead, which needs no id. Returns up to 10 hits, each with id, label, type and the number of findings; hits with findings come first, so the first hit with findings above 0 is usually the one to use. An enzyme or transporter has type protein. It says nothing about a node beyond its id and how many findings it has. If with_findings is 0 the graph holds no findings for the name; the hits may still be the right node for get_relations, get_reactions or reach.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected641 ms7
Connected757 ms7