MCP Server
Caelrith exposes every tool in your plan over the Model Context Protocol, so an MCP-capable client can discover and call them without per-endpoint integration code. The surface is a single endpoint: https://app.caelrith.com/api/v1/mcp.
Endpoint
POST https://app.caelrith.com/api/v1/mcp
- Uses the StreamableHTTP transport in stateless mode: each POST creates a fresh server instance, serves the request, and tears it down. No session, no negotiation state.
- No
initializehandshake is required — sendtools/listortools/calldirectly. GETandDELETEon this path return405. POST only.- Send
content-type: application/jsonandaccept: application/json, text/event-stream. Replies come back as JSON.
Clients that cannot speak MCP can read the same tools as two static JSON files: /api/v1/tools/tools.json (the endpoint catalog — each entry carries mcpName, the value for params.name in a tools/call request) and /api/v1/tools/output.json (response shapes, keyed by the same slugs). Those files are a build-time snapshot; a live tools/list call is always current and is filtered to your plan.
Authentication and entitlements
Authenticate with your API key in the x-api-key header. The key identifies your workspace; the same key is forwarded internally when a tool call is executed, so the underlying route’s own authentication, entitlement check and daily rate limit run exactly as they do for a direct REST call.
tools/listreturns only tools whose daily limit is positive on your workspace. A tool missing from your list is not in your plan.- Tools with no discoverable rate-limiter key are hidden by default — the surface fails closed.
- One MCP tool call makes two HTTP requests internally (the inbound JSON-RPC call and the loopback call to the real route), so it consumes two slots of the per-key burst limiter. The route’s daily limit is charged once.
This page was generated with a single key, so it lists that key’s tools. Yours may be a subset — call tools/list with your own key to see your exact set.
List tools
One POST, no handshake. The response is a JSON-RPC result whose result.tools array is the same payload this page renders.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Call a tool
Send a standard tools/call request. The name is the MCP tool name from the list above, and arguments is an object matching that tool’s input schema.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_associations",
"arguments": {
"entity": "example"
}
}
}curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_associations",
"arguments": {
"entity": "example"
}
}
}'A successful reply carries result.content[0].text (a human-readable trace) plus result.structuredContent with the raw data.
Errors and billing
- Unknown tool name — JSON-RPC protocol error (
-32601, Method not found). - Bad argument shape — a normal result with
isError: trueand the reason in the text content. Validation runs before any network call. - Underlying route returned 4xx/5xx —
isError: truewith the route’s own status and message. - Response envelope failure (e.g. missing success flag) —
isError: true. - Credits — one external-API credit is consumed per successful call. MCP has no 402: if the workspace runs out of credits the call succeeds and the result comes back with
isError: trueplus a billing notice telling the caller to top up.
Tool index (92)
analysis 1 tool
biology 7 tools
clinical 4 tools
clinical-trials 4 tools
cpc 2 tools
diseases 2 tools
drug-pricing 2 tools
financials 3 tools
funding-opportunities 2 tools
funding-rounds 5 tools
market-sizing 2 tools
medicare-drugs 2 tools
medicare-spending 2 tools
merged 2 tools
papers 3 tools
regulatory-approvals 11 tools
researchers 2 tools
resolution 1 tool
sponsors 1 tool
supply-chain 14 tools
- supply-chain_dmf
- supply-chain_dmf_details
- supply-chain_ema-gmdp
- supply-chain_ema-gmdp_details
- supply-chain_enforcement
- supply-chain_enforcement_details
- supply-chain_establishments
- supply-chain_establishments_details
- supply-chain_facilities_drilldown
- supply-chain_facilities_globe
- supply-chain_inspections
- supply-chain_inspections_details
- supply-chain_search
- supply-chain_walk
trials-map 3 tools
analysis
analysis_pdufa-swingReturns a list of upcoming PDUFA events with a computed swing score, plus metadata on the lookahead window and how many events were returned versus filtered. Call it to find near-term regulatory decision dates ranked by potential market impact. Returns 400 for invalid query parameters and 500 on internal failure.
Use cases
- Find upcoming PDUFA decision dates with high swing potential
- Screen near-term regulatory catalysts by score threshold
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| days | number | no | 1..365 | Lookahead window in days from today for upcoming events. (range 1-365; default 60) |
| min_score | number | no | 0..100 | Only return events whose swing score is at or above this value. (range 0-100; default 0) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analysis_pdufa-swing",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analysis_pdufa-swing",
"arguments": {}
}
}'biology
biology_associationsDiscover target-disease or disease-target associations with confidence scores and evidence counts. Resolves the input entity against targets first, then diseases (direct ID, exact, fuzzy and vector search). An entity that cannot be resolved returns HTTP 500 with an explanatory 'not found' error naming the input - correct the entity name or report it is not in the graph; repeating the same input cannot succeed. A 200 with an empty associations list means the entity resolved but nothing met minScore.
Use cases
- find targets associated with a disease
- explore evidence for a target-disease link
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| entity | string | yes | — | Biological entity name or ID (e.g., 'EGFR', 'diabetes'). |
| minScore | number | no | 0..1 | Minimum confidence score between 0 and 1 (default 0.1). (range 0-1; default 0.1) |
| limit | integer | no | 1..100 | Maximum number of associations (1-100, default 50). (range 1-100; default 50) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_associations",
"arguments": {
"entity": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_associations",
"arguments": {
"entity": "example"
}
}
}'biology_drug-to-targetsFor a given drug (generic or brand), return all known molecular targets, mechanism of action, and related drug forms (salts, biosimilars). Targets are aggregated across the resolved drug and its salt/variant forms. A drug that cannot be resolved returns HTTP 500 with an explanatory 'not found' error naming the input - correct the drug name or report it is not in the graph; repeating the same input cannot succeed. A 200 with an empty targets list means the drug resolved but has no recorded molecular targets (common for older drugs or biologicals with debated mechanisms).
Use cases
- understand a drug's mechanism of action
- find the molecular targets of a drug
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| drug | string | yes | — | Drug name (e.g., 'lapatinib', 'Keytruda'). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drug-to-targets",
"arguments": {
"drug": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drug-to-targets",
"arguments": {
"drug": "example"
}
}
}'biology_drugsReturns a paginated list of drugs with metadata (page, limit, totalItems, totalPages). Call it to browse or filter drugs by approval status, development phase, drug type, disease, or target, and to search by name. Invalid query parameters return HTTP 400; an upstream lookup failure returns HTTP 400 with an error message; unexpected failures return HTTP 500.
Use cases
- Search drugs by name
- List approved drugs for a disease
- Find drugs targeting a specific gene or protein
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | minimum length 1; maximum length 500 |
| is_approved | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| has_black_box | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| min_phase | integer | no | 0..4 | Range 0-4 (range 0-4) |
| max_phase | integer | no | 0..4 | Range 0-4 (range 0-4) |
| drug_type | string | no | — | minimum length 1 |
| disease | string | no | — | minimum length 1 |
| disease_id | string | no | — | minimum length 1 |
| target | string | no | — | minimum length 1 |
| target_id | string | no | — | minimum length 1 |
| sort | string | no | enum: max_phase, key | Default max_phase (default max_phase) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
| page | integer | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | integer | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drugs",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drugs",
"arguments": {}
}
}'biology_drugs_similar-by-targetReturns drugs that share at least one protein target with the given drug, ranked by overlap, along with the shared targets and the resolved root drug and its variant forms. Use it to find drugs with a similar mechanism of action or to explore target-based drug relationships. Returns 404 when the drug key cannot be resolved.
Use cases
- Find drugs that share targets with a given drug
- Explore mechanism-of-action neighbors for a drug
- List targets shared between a drug and its analogs
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | integer | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drugs_similar-by-target",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_drugs_similar-by-target",
"arguments": {
"key": "example"
}
}
}'biology_prioritize-targetsRank molecular targets for a disease with approved drugs, trial activity, sponsors, and a novelty score. Useful for identifying promising targets for drug discovery. Targets are selected top-N by association score first, then re-ordered by sortBy - 'novelty' therefore means most novel among the top-scoring set, not globally. An unresolvable disease name, a malformed efo_id (missing its 'PREFIX:' part), or an unknown efo_id returns HTTP 500 with an explanatory error - correct the input rather than retrying it.
Use cases
- identify promising drug discovery targets for a disease
Required: provide at least one of disease or efo_id
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| disease | string | no | — | Disease name (fuzzy resolution). Either disease or efo_id must be provided. |
| efo_id | string | no | — | Disease CURIE (e.g., MONDO:0004975). Precise ontology ID. Takes precedence over disease. |
| topN | integer | no | 1..200 | Maximum number of targets to return (1-200, default 20). Selection is top-N by association score; sortBy only re-orders the selected set. (range 1-200; default 20) |
| minScore | number | no | 0..1 | Minimum association score filter (0-1, default 0). (range 0-1; default 0) |
| sortBy | string | no | enum: score, novelty, trials, approved | Sort order: score, novelty, trials, approved (default score). Applied AFTER top-N selection - 'novelty' means most novel within the top-scoring set. (default score) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_prioritize-targets",
"arguments": {
"disease": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_prioritize-targets",
"arguments": {
"disease": "example"
}
}
}'biology_target-landscapeExplore the competitive landscape for a molecular target: all modulating drugs with approval status, safety warnings, max clinical phase (numeric, combining trial and indication evidence), trial counts, sponsors, and indications. A target that cannot be resolved returns HTTP 500 with an explanatory 'not found' error naming the input; a 200 with an empty drugs list means the target resolved but has no modulating drugs recorded.
Use cases
- full competitive landscape for a target across drugs and sponsors
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| target | string | yes | — | Molecular target name, gene symbol, or identifier (e.g., 'APP', 'ENSG00000142192', 'amyloid beta'). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_target-landscape",
"arguments": {
"target": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_target-landscape",
"arguments": {
"target": "example"
}
}
}'biology_target-to-drugsLook up all drugs that modulate a specific biological target (fixed 50-drug cap per call). Returns drug name, phase, approval status, mechanism of action, and safety warnings. The action filter is an exact, non-fuzzy match against the relationship's action_type (e.g. 'INHIBITOR') - a mistyped value returns an empty result, not an error. A target that cannot be resolved returns HTTP 500 with an explanatory 'not found' error naming the input - correct the target name; repeating the same input cannot succeed.
Use cases
- find all drugs hitting a target
- competitive scan for a target by action type
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| target | string | yes | — | Biological target name or symbol (e.g., 'EGFR', 'TNF'). |
| action | string | no | — | Filter by action type (e.g., 'INHIBITOR', 'AGONIST'). Exact match on the stored action_type - a mistyped value returns an empty list. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_target-to-drugs",
"arguments": {
"target": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "biology_target-to-drugs",
"arguments": {
"target": "example"
}
}
}'clinical
clinical_portfolio-comparisonCompare clinical trial portfolios of multiple sponsors for a specific disease. Returns market size, intersection counts, per-sponsor breakdowns, and paginated common trials.
Use cases
- compare two or more sponsors in one disease
- benchmark competitor pipelines
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| sponsors | string | yes | — | [comma-separated list] One or more sponsor names (up to 10). e.g. 'pfizer,roche'. |
| conditionKeyword | string | yes | — | Condition or disease keyword to compare portfolios for. A keyword that does not resolve to a disease returns zeros (market_size_trials 0) rather than an error - confirm the keyword before treating the zeros as data. |
| status | string | no | — | Exact trial status in the stored UPPERCASE form (e.g. RECRUITING). Case-sensitive - a mixed-case value returns no rows. |
| phase | string | no | — | Phase filter; loose forms ('2', 'II', 'Phase 2/3') are normalized server-side, otherwise a case-insensitive substring match. |
| page | integer | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | integer | no | 1..100 | Results per page (1-100, default 50). (range 1-100; default 50) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_portfolio-comparison",
"arguments": {
"sponsors": "example",
"conditionKeyword": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_portfolio-comparison",
"arguments": {
"sponsors": "example",
"conditionKeyword": "example"
}
}
}'clinical_search-compositeSearch clinical trials by disease, drug, target, and sponsor with combination filters. All parameters optional; at least one biological filter recommended. Returns paginated results, status breakdown, and full audit trail. disease/drug/target are resolved server-side (exact, alias, phrase, vector) and expanded to their graph ids; sponsor resolves via autocomplete + corporate hierarchy; status is an EXACT match on the stored UPPERCASE value (a mixed-case value returns no rows, not an error); phase accepts loose forms ('2', 'II', 'phase ii', 'Phase 2/3') normalized server-side, else a case-insensitive substring match. Failure modes: a disease/drug/target-ONLY query whose value cannot be resolved returns HTTP 500 naming the input (correct the name; repeating the same value cannot succeed); an unresolved entity inside a COMBINED query degrades to a 200 with totalCount 0; sponsor-only queries return 0 counts instead of an error. Target filters also return a data.mechanisms action-type summary; the status breakdown is empty for the single disease/drug/target fast paths.
Use cases
- size a sponsor's portfolio in a disease
- find trials combining sponsor + drug + disease filters
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| sponsor | string | no | — | Sponsor name (resolves via autocomplete and hierarchy). |
| disease | string | no | — | Disease or condition name (resolved to ontology IDs such as EFO, MONDO). |
| drug | string | no | — | Drug name (generic or brand, resolved to ChEMBL IDs). |
| target | string | no | — | Biological target (gene/protein) name or symbol. |
| phase | string | no | — | Clinical trial phase; loose forms are normalized server-side (e.g. 'Phase 2', '2', 'II', 'phase ii', 'Phase 2/3'), otherwise a case-insensitive substring fallback. |
| status | string | no | — | Exact trial status in the stored UPPERCASE form (e.g. RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING). Case-sensitive - a mixed-case value returns no rows. |
| sponsorType | string | no | — | — |
| includeSponsors | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| limit | integer | no | 1..100 | Results per page (1-100, default 50). (range 1-100; default 50) |
| page | integer | no | min 1 | Page number (default 1). (min 1; default 1) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_search-composite",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_search-composite",
"arguments": {}
}
}'clinical_trial-detailsRetrieve a single clinical trial's graph-enriched details by NCT ID (exact nct_id match, stored UPPERCASE; NCT ids only - not EU CT numbers). Returns graph-resolved sponsors plus conditions / interventions / summary as server-flattened strings: conditions and interventions are comma-joined and CAPPED at the first 5 entries each, and summary is cleaned and truncated (~800 chars + '...'), so never imply those lists are complete. Unknown ids return HTTP 404.
Use cases
- look up one trial by NCT ID
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| nctId | string | yes | — | ClinicalTrials.gov identifier, exact stored form (e.g., 'NCT05679999'). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_trial-details",
"arguments": {
"nctId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_trial-details",
"arguments": {
"nctId": "example"
}
}
}'clinical_trial-posMachine-learning Probability of Success (POS) for ONE clinical trial, scored live from the trial's design features (phase, blinding, statistical-analysis-plan mention, enrollment, arm count, sites, randomization, interventional / treatment flags, plus the resolved sponsor). Returns pos_score as a PERCENTAGE (0-100, two decimals; 74.25 = 74.25%) alongside the trial's status, phase and last_updated. The lookup key is the trial's registry_id - copy it from a trial search / sample result (the id / trial_id field); an unknown id returns HTTP 404, an unavailable inference service returns HTTP 502. Requires a workspace tier that includes the clinical-trial-pos tool (its own daily rate limit). The response carries NO feature breakdown - present the score as a model estimate, never as a factual outcome probability or clinical advice.
Use cases
- probability of success for one specific trial
- de-risk a single trial's design against the model baseline
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| trialId | string | yes | — | Trial registry id (registry_id, e.g. an NCT id). Copy it exactly from a trial search / sample result (the id / trial_id field); unknown ids return HTTP 404. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_trial-pos",
"arguments": {
"trialId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical_trial-pos",
"arguments": {
"trialId": "example"
}
}
}'clinical-trials
clinical-trials_detailsRetrieve one complete registry trial document by its registry id, including ALL update_logs, eligibility criteria, officials, contacts, facilities, resolved entities, and the resolved PI -> OpenAlex researcher links in data.researchers (each row has author_key, name, match_tag, h_index; author_key is directly usable as pi_author_id in the registry search). For a graph-enriched lookup by NCT id you can also use clinical.trial-details. List and sample responses never include researcher links - this endpoint is how you close the trial -> its PI -> that PI's other trials chain. If data.researchers is empty, this trial's PI is not resolved yet: report the gap or use another trial / a user-supplied id; do not fetch more trials hunting for an id.
Use cases
- full record for one trial by NCT id
- eligibility criteria, facilities, officials or update history for a trial
- get a trial's resolved PI OpenAlex author_key to then list that PI's other trials
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| trialId | string | yes | — | Trial registry identifier, e.g. NCT05679999 or an EU CT number like 2025-521742-15-00. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_details",
"arguments": {
"trialId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_details",
"arguments": {
"trialId": "example"
}
}
}'clinical-trials_sampleReturn up to 5 recently updated trial documents from the registry. Cheap way to inspect the real document shape or to fetch exact OpenAlex topic-name strings to reuse with the topic search. Available on all workspace tiers. Researcher (OpenAlex PI) links are NOT included here - use Trial Full Record on one of the returned trial ids to get a trial's resolved PI author_key.
Use cases
- inspect recent trial document fields
- get an exact openalex topic_name for the topic search
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | number | no | 1..5 | Number of trials to return (1-5, default 1). (range 1-5; default 1) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_sample",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_sample",
"arguments": {}
}
}'clinical-trials_searchPaginated search over registry trial DOCUMENTS with full-text phrase search and field filters (all AND-combined). Returns rich per-trial records (title, status, phase, enrollment, dates, sponsors, conditions, interventions, targets, facilities). Use this for registry-level listings, full-text lookups and filter-only searches; use clinical.search-composite when you need aggregated graph counts or status breakdowns.
Use cases
- find trials by full-text phrase over titles and summaries
- list trials filtered by status, phase, enrollment, dates or demographics
- trials for a disease CURIE (EFO/MONDO) or for a resolved principal investigator
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Full-text PHRASE match (English-analyzed) over title/summary text; single words or exact phrases only (no fuzzy matching). When present and sort is left at the default 'updated', sorting silently becomes relevance. |
| query | string | no | — | — |
| page | number | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | number | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| status | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| phase | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| sponsor | string | no | — | Exact match against resolved sponsor names (no fuzzy matching). |
| sponsor_type | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| mention | string | no | — | — |
| sponsor_query | string | no | — | repeatable; send one &sponsor_query= per line, do NOT comma-join (sponsor names contain commas); free-form value; value transformed server-side |
| trial_ids | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| condition | string | no | — | Exact match against resolved condition names (no fuzzy matching). |
| disease_id | string | no | — | Disease CURIE with uppercase prefix (e.g. EFO:0003767, MONDO:0004992). Values without a colon are silently ignored by the server (filter dropped). Get CURIEs from the Disease Autocomplete tool. |
| enrollment_min | number | no | — | Minimum enrollment (inclusive). |
| enrollment_max | number | no | — | Maximum enrollment (inclusive). |
| start_date_after | string | no | — | YYYY-MM-DD; matches trials with start_date >= this date. |
| completion_date_before | string | no | — | YYYY-MM-DD; matches trials with completion_date <= this date. |
| updated_since | string | no | — | — |
| last_update_posted_after | string | no | — | — |
| sort | string | no | enum: updated, enrollment, relevance | Sort order (default updated). 'updated' returns only trials with an update timestamp; 'enrollment' only trials with non-null enrollment; 'relevance' is only meaningful together with search. (default updated) |
| order | string | no | enum: asc, desc | Sort direction (default desc); applies to updated/enrollment. (default desc) |
| sex | string | no | — | Eligible sex, e.g. ALL, FEMALE, MALE. |
| min_age_years | number | no | — | Minimum participant age in years. |
| max_age_years | number | no | — | Maximum participant age in years. |
| healthy_volunteers | boolean | no | — | Accepts healthy volunteers (true/false). |
| design_allocation | string | no | — | Allocation methodology pass-through (e.g. Randomized). |
| design_masking | string | no | — | Masking methodology pass-through (e.g. Double, Single). |
| design_primary_purpose | string | no | — | Primary purpose pass-through (e.g. Treatment). |
| sponsor_trial_count_max | number | no | — | Only trials having some sponsor (resolved or raw) with a total trial count below this number - finds small/emerging sponsors. |
| pi_author_id | string | no | — | OpenAlex author id for a principal investigator. Accepts A#######, openalex_A####### or the full https://openalex.org/... URL. Invalid ids return HTTP 400. Obtain a real id from the user or from the Trial Full Record endpoint's data.researchers[].author_key - there is no name-to-id resolution, so never invent one. |
| pi_match_tag | string | no | enum: verified, shortcut, llm | Restrict PI links by resolution confidence: verified = institution gate passed (safe), shortcut = name-only match (provisional), llm = LLM-arbiter accepted. Only meaningful together with pi_author_id; on its own it does NOT filter (the full corpus total is returned). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_search",
"arguments": {}
}
}'clinical-trials_topicsSearch trials by OpenAlex topic name (exact PHRASE match over openalex_topics[].topic_name; relevance-sorted by default). Accepts every optional filter from the registry search. Get exact topic_name strings from the sample endpoint or from trial documents - fuzzy strings will not match.
Use cases
- trials under an OpenAlex research topic
- topic-restricted listing with status/phase/sponsor filters
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Additional full-text PHRASE match over title/summary text (same semantics as the registry search). |
| query | string | no | — | — |
| page | number | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | number | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| status | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| phase | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| sponsor | string | no | — | Exact match against resolved sponsor names (no fuzzy matching). |
| sponsor_type | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| mention | string | no | — | — |
| sponsor_query | string | no | — | repeatable; send one &sponsor_query= per line, do NOT comma-join (sponsor names contain commas); free-form value; value transformed server-side |
| trial_ids | string | no | — | [comma-separated list] array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| condition | string | no | — | Exact match against resolved condition names (no fuzzy matching). |
| disease_id | string | no | — | Disease CURIE with uppercase prefix (e.g. EFO:0003767, MONDO:0004992). Values without a colon are silently ignored by the server (filter dropped). Get CURIEs from the Disease Autocomplete tool. |
| enrollment_min | number | no | — | Minimum enrollment (inclusive). |
| enrollment_max | number | no | — | Maximum enrollment (inclusive). |
| start_date_after | string | no | — | YYYY-MM-DD; matches trials with start_date >= this date. |
| completion_date_before | string | no | — | YYYY-MM-DD; matches trials with completion_date <= this date. |
| updated_since | string | no | — | — |
| last_update_posted_after | string | no | — | — |
| sort | string | no | enum: updated, enrollment, relevance | Sort order (server default for topic search: relevance). 'updated' returns only trials with an update timestamp; 'enrollment' only trials with non-null enrollment. (default updated) |
| order | string | no | enum: asc, desc | Sort direction (default desc); applies to updated/enrollment. (default desc) |
| sex | string | no | — | Eligible sex, e.g. ALL, FEMALE, MALE. |
| min_age_years | number | no | — | Minimum participant age in years. |
| max_age_years | number | no | — | Maximum participant age in years. |
| healthy_volunteers | boolean | no | — | Accepts healthy volunteers (true/false). |
| design_allocation | string | no | — | Allocation methodology pass-through (e.g. Randomized). |
| design_masking | string | no | — | Masking methodology pass-through (e.g. Double, Single). |
| design_primary_purpose | string | no | — | Primary purpose pass-through (e.g. Treatment). |
| sponsor_trial_count_max | number | no | — | Only trials having some sponsor (resolved or raw) with a total trial count below this number - finds small/emerging sponsors. |
| pi_author_id | string | no | — | OpenAlex author id for a principal investigator. Accepts A#######, openalex_A####### or the full https://openalex.org/... URL. Invalid ids return HTTP 400. Obtain a real id from the user or from the Trial Full Record endpoint's data.researchers[].author_key - there is no name-to-id resolution, so never invent one. |
| pi_match_tag | string | no | enum: verified, shortcut, llm | Restrict PI links by resolution confidence: verified = institution gate passed (safe), shortcut = name-only match (provisional), llm = LLM-arbiter accepted. Only meaningful together with pi_author_id; on its own it does NOT filter (the full corpus total is returned). |
| topic | string | yes | — | OpenAlex topic name, phrase-matched exactly (e.g. 'CAR-T cell therapy research'). Prefer exact topic_name strings seen in trial documents. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_topics",
"arguments": {
"topic": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "clinical-trials_topics",
"arguments": {
"topic": "example"
}
}
}'companies
companies_detailsReturns the profile for a single company identified by its domain, including its linked organizations. Call it when you already know a company's domain and need its details. Returns 404 if no company matches the domain, and 400 if the domain is malformed.
Use cases
- Look up a company profile by domain
- Get the organizations linked to a company
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| include_embedding | boolean | no | — | Set to false to omit the company's embedding from the response. |
| domain | string | yes | — | Company web domain, e.g. example.com. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_details",
"arguments": {
"domain": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_details",
"arguments": {
"domain": "example"
}
}
}'companies_searchReturns a paginated list of company profiles with metadata including total item count, callable with free-text search and structured filters. Use it to find companies by name, domain, sector, location, or profile completeness. Invalid query parameters return HTTP 400.
Use cases
- Search companies by name or keyword
- Filter companies by sector, country, or business model
- Find companies with contact or leadership data available
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..200 | Range 1-200; default 20 (range 1-200; default 20) |
| search | string | no | — | Free-text query matched against company content; when supplied, results can be ranked by relevance. |
| query | string | no | — | maximum length 2000 |
| domain | string | no | — | Company website domain, e.g. example.com. |
| status | string | no | — | Company status value to filter by. |
| sector | string | no | — | Industry sector label. |
| subsector | string | no | — | More specific industry label within a sector. |
| business_model | string | no | — | Business model label to filter by. |
| country | string | no | — | Country name or code to filter by. |
| city | string | no | — | City name to filter by. |
| source_org_country | string | no | — | Country of the source organization associated with the company. |
| tech | string | no | — | Technology label to filter by. |
| founded_year_min | integer | no | — | Earliest founding year to include. |
| founded_year_max | integer | no | — | Latest founding year to include. |
| enrichment_version | integer | no | — | Only return companies at this enrichment version. |
| has_email | boolean | no | — | When true, only companies with an email address. |
| has_phone | boolean | no | — | When true, only companies with a phone number. |
| has_linkedin | boolean | no | — | When true, only companies with a LinkedIn profile. |
| has_leadership | boolean | no | — | When true, only companies with leadership information. |
| has_products | boolean | no | — | When true, only companies with product information. |
| has_embedding | boolean | no | — | When true, only companies that have an embedding. |
| sort | string | no | enum: relevance, last_updated, processed_at, company_name, country, founded_year | Field to order results by; relevance applies only when a search term is given, otherwise it falls back to last_updated. (default relevance) |
| order | string | no | enum: asc, desc | Sort direction, ascending or descending. (default desc) |
| include_embedding | boolean | no | — | When true, include the company embedding in each result. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_search",
"arguments": {}
}
}'companies_similarReturns companies similar to the given company, ranked by cosine similarity, along with the source company and metadata about the result set. Use it to find comparable or related companies from a known domain. Fails with 404 if the company does not exist or has no similarity data available yet, 400 for invalid query parameters, and 503 if similarity search is temporarily unavailable.
Use cases
- Find companies similar to a known company
- Discover comparable businesses by domain
- Expand a company list with lookalikes
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | number | no | 1..50 | Maximum number of similar companies to return. (range 1-50; default 10) |
| min_similarity | number | no | -1..1 | Minimum cosine similarity a company must reach to be included. (range -1-1) |
| sector | string | no | — | Restrict results to companies in this sector. |
| country | string | no | — | Restrict results to companies in this country. |
| status | string | no | — | Restrict results to companies with this status. |
| include_embedding | boolean | no | — | When true, include each result's similarity vector in the response. |
| domain | string | yes | — | Company domain used to identify the source company. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_similar",
"arguments": {
"domain": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_similar",
"arguments": {
"domain": "example"
}
}
}'companies_similar-searchReturns companies ranked by similarity to a free-text query, with metadata on the query, number returned, and how many candidates were skipped. Call it to find companies matching a description or concept rather than an exact name. Fails with 400 for invalid parameters and 503 when the similarity service is unavailable.
Use cases
- Find companies similar to a free-text description
- Discover companies by concept within a sector or country
- Surface near-duplicate or related companies for a query
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | number | no | 1..50 | Maximum number of companies to return. (range 1-50; default 10) |
| min_similarity | number | no | -1..1 | Similarity threshold; results below this score are excluded. (range -1-1) |
| sector | string | no | — | Restrict results to companies in this sector. |
| country | string | no | — | Restrict results to companies in this country. |
| status | string | no | — | Restrict results to companies with this status. |
| include_embedding | boolean | no | — | When true, include the company's similarity representation in each result. |
| q | string | yes | — | Free-text query describing the company or concept to match against. |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| has_email | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_similar-search",
"arguments": {
"q": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "companies_similar-search",
"arguments": {
"q": "example"
}
}
}'cpc
cpc_lookupReturns the single CPC classification entry matching an exact CPC code. Call it to resolve a known CPC code to its classification details. Fails with 404 when no entry matches the code, 400 when the code parameter is invalid, and 500 on an internal error.
Use cases
- Resolve a CPC code to its classification details
- Verify that a CPC code exists
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| code | string | yes | — | The exact CPC code to look up. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cpc_lookup",
"arguments": {
"code": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cpc_lookup",
"arguments": {
"code": "example"
}
}
}'cpc_searchReturns a list of CPC classification codes with their descriptions whose description begins with the supplied query text. Call it to look up CPC codes by the start of their description. Returns 400 if the query parameters are invalid and 500 on an internal failure.
Use cases
- Look up CPC codes by description prefix
- Find a CPC classification code for a topic
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| q | string | yes | — | Text the code description must start with; matching is case-insensitive. |
| limit | number | no | 1..100 | Range 1-100; default 10 (range 1-100; default 10) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cpc_search",
"arguments": {
"q": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cpc_search",
"arguments": {
"q": "example"
}
}
}'diseases
diseases_autocompleteResolve a partial or full disease name to canonical disease entries carrying an ontology CURIE (efo_id, e.g. EFO:0003767). Returns up to 10 name/efo_id matches. Use this to convert a disease name into the exact CURIE expected by the disease_id / efo_id filters on trial search, regulatory approvals and Medicare drug spending, instead of guessing an ontology id.
Use cases
- resolve a disease name to its EFO CURIE
- disambiguate a disease name before filtering trials, approvals or Medicare spending by ontology id
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| q | string | yes | — | Partial or full disease name to autocomplete (e.g. 'breast cancer', 'sickle cell disease'). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "diseases_autocomplete",
"arguments": {
"q": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "diseases_autocomplete",
"arguments": {
"q": "example"
}
}
}'diseases_family-treeReturns the ancestor and descendant branches of a disease in the disease hierarchy, up to the requested depth, along with counts and whether the root key resolved. Call it to explore parent/child relationships around a disease. Returns 400 for invalid query parameters, 503 when the disease hierarchy is unavailable on this deployment, and 500 on internal failure.
Use cases
- Explore a disease's parent and child relationships
- Find ancestor diseases of a condition
- List descendant diseases under a disease
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| depth | integer | no | 1..8 | Range 1-8; default 3 (range 1-8; default 3) |
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "diseases_family-tree",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "diseases_family-tree",
"arguments": {
"key": "example"
}
}
}'drug-pricing
drug-pricing_detailsReturns the pricing record for a single drug product identified by its key. Call it when you already have a product key and need that product's pricing details. Returns 404 if no product matches the key, and 500 on an internal failure.
Use cases
- Look up pricing for a specific drug product
- Fetch details for a known product key
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "drug-pricing_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "drug-pricing_details",
"arguments": {
"key": "example"
}
}
}'drug-pricing_searchReturns paginated Medicare drug pricing records with a data array and meta (page, limit, totalItems, totalPages). Call it to look up drug prices by name, NDC, application number, classification, generic status, price range, or date range; a non-empty search switches to relevance-style matching. Returns 400 for invalid query parameters, 503 when the index is unavailable on this deployment, and 500 on other failures.
Use cases
- Look up Medicare drug prices by drug name
- Filter drug pricing records by NDC or application number
- Find generic or brand drugs within a price or date range
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | maximum length 500 |
| ndc | string | no | — | maximum length 100 |
| application_number | string | no | — | maximum length 50 |
| classification | string | no | — | maximum length 50 |
| is_generic | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| min_price | number | no | — | Lower bound on price. |
| max_price | number | no | — | Upper bound on price. |
| min_date | string | no | — | maximum length 20 |
| max_date | string | no | — | maximum length 20 |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| sort | string | no | enum: date, price, key | Default date (default date) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "drug-pricing_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "drug-pricing_search",
"arguments": {}
}
}'financials
financials_filingsReturns a paginated, filtered, sorted list of SEC filings with page metadata (totalItems, totalPages, hasMore) and the applied sort/order. Use it to browse filings by ticker, form type, filing date range, or to poll for filings changed since a prior cursor. Returns 400 for invalid or explicitly empty tickers/form_types or an unparseable updated_since, 503 when the feed is not available on the current data epoch, and 500 on unexpected failure.
Use cases
- List recent filings for one or more tickers
- Poll for filings updated since a last-seen timestamp
- Filter filings by form type and filing date range
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| tickers | string | no | — | Comma-separated ticker symbols, matched as OR (e.g. ARWR,VRTX); omit to skip the filter. |
| form_types | string | no | — | Comma-separated SEC form types, matched as OR (e.g. 8-K,10-Q); omit to skip the filter. |
| updated_since | string | no | — | ISO-8601 timestamp; returns only filings synced strictly after it, for incremental polling. |
| date_from | string | no | — | Inclusive lower bound on the filing date. |
| date_to | string | no | — | Inclusive upper bound on the filing date. |
| sort | string | no | enum: synced_at, date_filed | Default synced_at (default synced_at) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
| page | integer | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | integer | no | 1..500 | Range 1-500; default 100 (range 1-500; default 100) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_filings",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_filings",
"arguments": {}
}
}'financials_lei-to-tickerReturns the LEI's name together with the SEC entities (ticker mappings) associated with that LEI. Call it to resolve a Legal Entity Identifier to its publicly traded ticker(s). Returns 404 when no SEC ticker mapping exists for the LEI, 400 for an invalid LEI parameter, and 500 on internal failure.
Use cases
- Resolve an LEI to its SEC ticker
- Look up the entity name behind an LEI
- Find publicly traded entities for a legal entity identifier
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| lei | string | yes | — | minimum length 20; maximum length 20; input normalized server-side (.toUpperCase()); must match pattern /^[A-Z0-9]{20}$/ (Invalid LEI format) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_lei-to-ticker",
"arguments": {
"lei": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_lei-to-ticker",
"arguments": {
"lei": "example"
}
}
}'financials_metricsReturns financial metrics for a company identified by ticker, including cash, short-term investments, debt, revenue, net income, liquidity, quarterly burn, runway in years, shares outstanding, and a burn/runway breakdown. Call it to assess a company's cash position and how long its liquidity lasts at the current burn rate. Returns 404 when no financial data exists for the ticker.
Use cases
- Assess a company's cash runway and burn rate
- Look up liquidity and debt metrics by ticker
- Compare revenue and net income for a public company
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| ticker | string | yes | — | minimum length 1; maximum length 10; input normalized server-side (.toUpperCase()) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_metrics",
"arguments": {
"ticker": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "financials_metrics",
"arguments": {
"ticker": "example"
}
}
}'funding-opportunities
funding-opportunities_detailsReturns the full record for a single funding opportunity, including its organization chain and complete update history. Call it when you already have a funding ID and need the complete detail rather than a summary. Fails with 404 if no opportunity matches the ID, 400 if the ID is malformed, 503 if the detail lookup is unavailable on this deployment, and 500 on internal error.
Use cases
- Fetch full details of a funding opportunity by ID
- Review the update history of a funding opportunity
- Look up the organization chain behind a funding opportunity
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| fundingId | string | yes | — | minimum length 1; maximum length 500 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-opportunities_details",
"arguments": {
"fundingId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-opportunities_details",
"arguments": {
"fundingId": "example"
}
}
}'funding-opportunities_searchReturns a paginated list of funding opportunities, optionally filtered by source, status, sponsor, mention, funding range, and date windows, or narrowed by one search lane (search, query, or semantic). Call it to browse or search funding opportunities. Fails with 400 when source values are unknown, when more than one of search/query/semantic is supplied, or when a non-relevance sort is combined with a search lane.
Use cases
- Browse funding opportunities by status and deadline
- Find funding opportunities matching a phrase or boolean query
- Filter opportunities by sponsor, funding range, or posting date
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | maximum length 2000 |
| query | string | no | — | maximum length 2000 |
| semantic | string | no | — | maximum length 2000 |
| source | string | no | — | [comma-separated list] maximum length 200; array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| status | string | no | — | [comma-separated list] maximum length 200; array parameter - sent as a single comma-separated string; value is parsed from the raw query string and coerced server-side |
| funding_min | number | no | — | Lower bound on funding amount. |
| funding_max | number | no | — | Upper bound on funding amount. |
| deadline_after | string | no | — | maximum length 40 |
| deadline_before | string | no | — | maximum length 40 |
| posted_after | string | no | — | maximum length 40 |
| ingested_after | string | no | — | maximum length 40 |
| updated_since | string | no | — | maximum length 40 |
| sponsor | string | no | — | maximum length 500 |
| mention | string | no | — | maximum length 500 |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..200 | Range 1-200; default 20 (range 1-200; default 20) |
| sort | string | no | enum: relevance, updated, deadline, start_date, funding | Ordering of results; a value other than relevance cannot be combined with a search lane. |
| order | string | no | enum: asc, desc | Default desc (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-opportunities_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-opportunities_search",
"arguments": {}
}
}'funding-rounds
funding-rounds_companiesReturns a paginated list of companies aggregated from their funding rounds, each with company profile fields, round count, round types, first and latest round dates, latest round type and amount, total funding amount, currencies, investors, emails, founders, and leadership. Call it to browse or filter companies by sector, country, round type, verification, leadership or email availability, and to sort by recency, name, round count, or total amount. Invalid query parameters return HTTP 400.
Use cases
- List funded companies in a sector or country
- Find companies with the most funding rounds or highest total funding
- Filter companies that have leadership or contact emails available
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| page | number | no | min 1 | Page of results to return. (min 1; default 1) |
| limit | number | no | 1..500 | Number of companies per page. (range 1-500; default 20) |
| sector | string | no | — | Sector label to restrict results to. |
| country | string | no | — | Country label to restrict results to. |
| round_type | string | no | — | Funding round type a company must have at least one of. |
| website_verified | boolean | no | — | Restrict to companies whose website is verified (true) or not (false). |
| has_leadership | boolean | no | — | Restrict to companies with (true) or without (false) leadership contacts. |
| has_emails | boolean | no | — | Restrict to companies with (true) or without (false) contact emails. |
| min_round_count | integer | no | min 1 | Only include companies with at least this many funding rounds. (min 1) |
| min_total_amount | number | no | min 0 | Only include companies whose summed funding amount reaches this value. (min 0) |
| sort | string | no | enum: latest_round_date, company_name, round_count, total_amount | Field to order results by. (default latest_round_date) |
| order | string | no | enum: asc, desc | Sort direction, ascending or descending. (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_companies",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_companies",
"arguments": {}
}
}'funding-rounds_companies_detailsReturns an aggregated profile for a company in the funding rounds data: company details, round count, round types, first and latest round dates, latest round amount, total funding amount, and deduplicated investors, founders, leadership, emails, and related organizations. Call it to look up a company's funding history and contacts by its key or name. Returns 404 if no funding rounds match the company.
Use cases
- Look up a company's funding history and investors
- Get total funding and latest round details for a company
- Find founders and leadership contacts for a funded company
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| companyKey | string | yes | — | Company key or company name; matching is case-insensitive. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_companies_details",
"arguments": {
"companyKey": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_companies_details",
"arguments": {
"companyKey": "example"
}
}
}'funding-rounds_detailsReturns a single funding round by its id, including its associated organizations and recent update log entries. Call it when you have a funding round id and need its full details. Returns 404 if no funding round matches the id, and 400 if the id is malformed.
Use cases
- Look up a funding round by id
- Get organizations involved in a funding round
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | yes | — | Funding round identifier. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_details",
"arguments": {
"id": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_details",
"arguments": {
"id": "example"
}
}
}'funding-rounds_searchReturns a paginated list of funding rounds with company, amount, round type, date, and investor details, plus total count and timing metadata. Call it to find or filter funding rounds by sector, country, round type, company, investor, amount range, or publication date. Invalid query parameters return HTTP 400; server failures return HTTP 500.
Use cases
- Find funding rounds by sector and country
- List recent rounds for a company or investor
- Filter rounds by amount range and date
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| page | number | no | min 1 | Page number of results to return. (min 1; default 1) |
| limit | number | no | 1..500 | Number of results per page. (range 1-500; default 20) |
| search | string | no | — | Free-text query matched against round and company content; when set, results can be ranked by relevance. |
| sector | string | no | — | Sector to filter rounds by. |
| country | string | no | — | Country to filter rounds by. |
| round_type | string | no | — | Funding round type to filter by (e.g. seed, series A). |
| feed_name | string | no | — | Name of the source feed the round came from. |
| company | string | no | — | Company name to filter rounds by. |
| investor | string | no | — | Investor name to filter rounds by. |
| has_website | boolean | no | — | Restrict to rounds whose company has a website. |
| website_verified | boolean | no | — | Restrict to rounds whose company website is verified. |
| has_leadership | boolean | no | — | Restrict to rounds whose company has leadership information. |
| has_emails | boolean | no | — | Restrict to rounds whose company has contact emails. |
| has_linkedin | boolean | no | — | Restrict to rounds whose company has a LinkedIn profile. |
| min_amount | number | no | min 0 | Minimum funding amount. (min 0) |
| max_amount | number | no | min 0 | Maximum funding amount. (min 0) |
| amount_currency | string | no | — | Currency the amount filters apply to. |
| pub_date_from | string | no | — | Earliest publication date, ISO date YYYY-MM-DD. |
| pub_date_to | string | no | — | Latest publication date, ISO date YYYY-MM-DD. |
| sort | string | no | enum: relevance, pub_date, processed_at, last_updated, amount_value, company_name | Field to sort by; relevance ranks by search match and falls back to publication date when no search is given. (default relevance) |
| order | string | no | enum: asc, desc | Sort direction, ascending or descending. (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_search",
"arguments": {}
}
}'funding-rounds_statusReturns the current load state of the funding-rounds data, including its epoch state. Call it to check whether funding-round data is ready before querying other funding-round endpoints; it responds immediately without waiting for initialization.
Use cases
- Check funding-round data readiness
- Poll funding-round load state before querying
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_status",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "funding-rounds_status",
"arguments": {}
}
}'grants
grants_detailsRetrieve ONE grant's full record by its original identifier (NIH application_id or CORDIS id): title, abstract, funding amount, project start/end dates, organizations and the top OpenAlex topics with scores. Copy the exact grant_id from a grant registry search or sample result; never construct or guess it.
Use cases
- full record for one grant by its original id
- abstract, organizations and OpenAlex topics for a grant
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| grantId | string | yes | — | Original grant identifier (NIH application_id or CORDIS id). Copy it exactly from the grant_id field of a search or sample result. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_details",
"arguments": {
"grantId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_details",
"arguments": {
"grantId": "example"
}
}
}'grants_sampleReturn a small fixed sample of recent grants (3 NIH + 2 CORDIS) to preview the real grant document shape. Takes no parameters. Available on all workspace tiers. Use a returned grant_id with the Grant Full Record tool.
Use cases
- inspect the real grant document shape
- get a grant_id for the full-record tool
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_sample",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_sample",
"arguments": {}
}
}'grants_searchPaginated full search over NIH RePORTER and EU CORDIS grant RECORDS: full-text search over title/abstract plus indexed filters (source, funding range, start/end dates, exact OpenAlex topic). Returns rich per-grant records with funding amount, dates, organizations and topics. Use this for individual grant listings; use grants.topic-funding / grants.topic-funding-history for aggregated funding totals of a topic and grants.sponsor-funding for an organization's totals. NOT filterable: organizations, partners, abstract (full-text only) and nested objects. Requires a Pro workspace.
Use cases
- find grants by full-text phrase over title/abstract
- list grants filtered by source, funding range or start date
- grants under an exact OpenAlex topic name
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Full-text search over title and abstract (language-aware analyzer; falls back to slower substring matching when the index is unavailable). |
| query | string | no | — | maximum length 2000 |
| source | string | no | enum: NIH, CORDIS | Restrict to one funding source: 'NIH' or 'CORDIS'. |
| funding_min | number | no | — | Minimum total funding amount (inclusive). |
| funding_max | number | no | — | Maximum total funding amount (inclusive). |
| start_date_after | string | no | — | YYYY-MM-DD; matches grants with project start date >= this date. |
| end_date_before | string | no | — | YYYY-MM-DD; matches grants with project end date <= this date. |
| updated_since | string | no | — | maximum length 40 |
| topic | string | no | — | Exact OpenAlex topic name to filter by (e.g. 'breast cancer'). Fuzzy strings will not match. |
| sponsor | string | no | — | — |
| mention | string | no | — | — |
| page | number | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | number | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| sort | string | no | enum: start_date, funding, updated, relevance | Sort field: start_date (default), funding, or updated. |
| order | string | no | enum: asc, desc | Sort direction (default desc). (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_search",
"arguments": {}
}
}'grants_sponsor-fundingReturns grant money totals for one sponsor organization, broken down by NIH and CORDIS counts and amounts plus a combined total. Accepts a ROR id, LEI, raw organization name, or raw mention id, so call it when you have any of those and want per-org funding totals. An unknown sponsor returns 200 with zero totals, null name and kind, and the keys that were tried. Invalid query parameters return 400; other failures return 500.
Use cases
- Get total grant funding for a research organization
- Look up NIH and CORDIS grant totals by ROR id or LEI
- Check funding totals for an organization given only its name
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| sponsor | string | yes | — | minimum length 1 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_sponsor-funding",
"arguments": {
"sponsor": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_sponsor-funding",
"arguments": {
"sponsor": "example"
}
}
}'grants_topic-fundingReturns money totals for a single primary research topic, split by NIH and CORDIS funding, with total grant counts and a combined total. Call it to see how much grant money a topic has attracted; grants without a start date are still counted. An unknown topic returns 200 with zero totals and the topic echoed back. Invalid query parameters return 400; an internal failure returns 500.
Use cases
- Get total grant funding for a research topic
- Compare NIH versus CORDIS money for a topic
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| topic | string | yes | — | minimum length 1 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_topic-funding",
"arguments": {
"topic": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "grants_topic-funding",
"arguments": {
"topic": "example"
}
}
}'market-sizing
market-sizing_detailsReturns the market-sizing record for a single disease identified by its key. Call it when you already have a disease key and need its market-sizing details. Returns 404 if no disease matches the key, and 500 on an internal failure.
Use cases
- Look up market sizing for a disease by key
- Fetch details for a known disease key
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "market-sizing_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "market-sizing_details",
"arguments": {
"key": "example"
}
}
}'market-sizing_searchReturns a paginated list of market-sizing records with metadata (page, limit, totalItems, totalPages). Call it to browse or filter market-sizing data by spending, prevalence, or drug count, or to search by text. Returns 400 for invalid query parameters, 503 when the data is unavailable on this deployment, and 500 on other failures.
Use cases
- Browse market-sizing records by spending range
- Filter markets by prevalence or drug count
- Search market-sizing records by text
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | maximum length 500 |
| contains | string | no | — | maximum length 200 |
| has_prevalence | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| min_spending | number | no | — | Lower bound on spending (alias of min_weighted). |
| max_spending | number | no | — | Upper bound on spending (alias of max_weighted). |
| minSpending | number | no | — | Lower bound on spending (alias of min_weighted). |
| maxSpending | number | no | — | Upper bound on spending (alias of max_weighted). |
| min_weighted | number | no | — | Lower bound on weighted spending. |
| max_weighted | number | no | — | Upper bound on weighted spending. |
| min_raw | number | no | — | Lower bound on raw spending. |
| max_raw | number | no | — | Upper bound on raw spending. |
| min_prevalence | number | no | — | Lower bound on prevalence. |
| max_prevalence | number | no | — | Upper bound on prevalence. |
| min_drug_count | number | no | — | Lower bound on number of drugs. |
| max_drug_count | number | no | — | Upper bound on number of drugs. |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| sort | string | no | enum: total_prev_weighted, total_raw, prevalence, drug_count, key | Default total_prev_weighted (default total_prev_weighted) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "market-sizing_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "market-sizing_search",
"arguments": {}
}
}'medicare-drugs
medicare-drugs_detailsRetrieve ONE Medicare Part D drug's full 2025 spending record by its unique _key (derived from the generic name, e.g. 'aripiprazole'). Returns the full document including brand names, spending/claims/beneficiary metrics, the linked ChEMBL molecule and approved indications (already deduplicated by efo_id server-side). Use after a Medicare Drug Spending Search; copy the exact _key string from a result - never construct or guess it.
Use cases
- full spending detail for one Medicare drug
- approved indications (efo_id + disease_name) for a drug
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | Unique drug _key derived from the generic name (e.g. 'aripiprazole'). Copy it exactly from the '_key' field of a Medicare Drug Spending Search record; do not construct it from the drug name. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-drugs_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-drugs_details",
"arguments": {
"key": "example"
}
}
}'medicare-drugs_searchPaginated, filterable list of Medicare Part D drugs with 2025 spending data: total spending, claims, beneficiaries, average spending per claim/beneficiary, plus linked ChEMBL molecule and approved indications. All filters AND-combine - the generic_name filter does NOT override search or the other filters. The search filter is an exact whole-term match (English-analyzed, case-insensitive) against a complete generic OR brand name; partial strings like 'apix' match nothing. generic_name is an exact case-insensitive match against the stored Title Case name (e.g. 'Apixaban'; any casing works). efo_id accepts OBO-style and dash forms ('EFO:0003907') and is normalized server-side to the stored 'EFO_0003907' format. Each record's '_key' field is the id the Medicare Drug Record tool expects.
Use cases
- top drugs by Medicare Part D spending
- Medicare spending for a drug or brand (pass the complete generic or brand name)
- drugs tied to a disease efo_id or a ChEMBL molecule id
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Exact whole-term match (English-analyzed, case-insensitive) against generic_name OR brand_names - pass the COMPLETE generic or brand name (e.g. 'Apixaban', 'Eliquis'); partial strings like 'apix' match nothing. |
| generic_name | string | no | — | Exact case-insensitive match on the stored generic name (Title Case, e.g. 'Apixaban'; any casing works; no partial matches). AND-combines with search and every other filter - it never overrides them. |
| efo_id | string | no | — | Filter by approved indication using a disease CURIE (e.g. EFO:0003767). OBO-style ('EFO:0003907') and dash forms are accepted and normalized server-side to the stored 'EFO_0003907' format. Get CURIEs from the Disease Autocomplete tool. |
| molecule_id | string | no | — | Exact, case-sensitive ChEMBL molecule id - pass it verbatim as returned in a row's molecule.chembl_id (e.g. 'CHEMBL1201599'). |
| match_method | string | no | — | Filter by how the molecule link was established: exact_generic or unmatched. |
| min_spending | number | no | — | Minimum total_spending (inclusive). |
| max_spending | number | no | — | Maximum total_spending (inclusive). |
| primary_indication_only | boolean | no | — | — |
| page | number | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | number | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| sort | string | no | enum: total_spending, generic_name | Sort field (default total_spending). (default total_spending) |
| order | string | no | enum: asc, desc | Sort direction (default desc). (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-drugs_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-drugs_search",
"arguments": {}
}
}'medicare-spending
medicare-spending_detailsReturns the full spending record for a single Medicare spending entry identified by its key. Call it when you already have a key from a spending search and need the complete record. Returns 404 if no entry matches the key, and 500 on internal failure.
Use cases
- Fetch full details for a Medicare spending entry
- Look up a spending record by its key
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-spending_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-spending_details",
"arguments": {
"key": "example"
}
}
}'medicare-spending_searchReturns a paginated list of Medicare spending records with data and meta (page, limit, totalItems, totalPages). Call it to browse or filter spending by drug names, manufacturer, year, and spending range; supplying a search term switches to a text search over the records. Returns 400 for invalid query parameters, 503 when the data is unavailable on this deployment, and 500 on other failures.
Use cases
- Browse Medicare spending records by year
- Filter spending by manufacturer or drug name
- Find spending records within a spending range
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | maximum length 500 |
| spending_key | string | no | — | maximum length 200 |
| brand_name | string | no | — | maximum length 200 |
| generic_name | string | no | — | maximum length 300 |
| manufacturer | string | no | — | maximum length 200 |
| year | string | no | — | maximum length 50 |
| min_spending | number | no | — | Lower bound on total spending. |
| max_spending | number | no | — | Upper bound on total spending. |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| sort | string | no | enum: total_spending, key, brand | Default total_spending (default total_spending) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-spending_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "medicare-spending_search",
"arguments": {}
}
}'merged
merged_pathReturns the boundary of a multi-step traversal starting from one or more start nodes, following the requested step sequence. Call it to walk relationships across the merged graph from known starting points. Fails with 400 when start is empty, when steps cannot be parsed, or when required data is not loaded; returns 500 on internal errors.
Use cases
- Trace a multi-hop relationship path from known starting nodes
- Explore connected entities across several relationship steps
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| start | string | yes | — | [comma-separated list] minimum length 1 |
| steps | string | yes | — | minimum length 1 |
| limit | integer | no | 1..50000 | Range 1-50000; default 20000 (range 1-50000; default 20000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "merged_path",
"arguments": {
"start": "example",
"steps": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "merged_path",
"arguments": {
"start": "example",
"steps": "example"
}
}
}'merged_walkTraverses the merged graph from one or more starting nodes across the given edge types and returns the reached boundary nodes plus traversal metadata. Call it to explore relationships outward from known nodes, optionally restricting hop distance and direction. Returns 400 when start or edges is empty, when a parameter is invalid, or when a requested edge type is not loaded; returns 500 on internal failure.
Use cases
- Explore relationships outward from known nodes
- Find nodes reachable within a hop range across selected edge types
- Trace incoming or outgoing connections from a set of starting nodes
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| start | string | yes | — | [comma-separated list] minimum length 1 |
| edges | string | yes | — | [comma-separated list] minimum length 1 |
| direction | string | no | enum: out, in, both | Default out (default out) |
| min_hops | integer | no | 0..64 | Range 0-64; default 1 (range 0-64; default 1) |
| max_hops | integer | no | 0..64 | Range 0-64; default 3 (range 0-64; default 3) |
| limit | integer | no | 1..50000 | Range 1-50000; default 20000 (range 1-50000; default 20000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "merged_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "merged_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}'papers
papers_detailReturns a single paper record identified by DOI, arXiv/OSF-prefixed id, sanitized key, or PMID. Call it when you already have one paper identifier and need its full record. Returns 404 if no paper matches, 400 for an invalid query, and 500 on an internal failure.
Use cases
- Fetch a paper's full record by DOI
- Look up a paper by arXiv or OSF id
- Resolve a PubMed id to a paper record
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| doi | string | yes | — | minimum length 1 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_detail",
"arguments": {
"doi": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_detail",
"arguments": {
"doi": "example"
}
}
}'papers_sampleReturns a preview list of the five most recently published papers, ordered newest first, along with a sample size and a note. Call it to show a quick recent-papers preview without specifying any filters. Fails with 500 if the request cannot be completed, or with a not-ready response when the service is unavailable.
Use cases
- Preview the latest published papers
- Show a small recent-papers list on a landing page
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_sample",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_sample",
"arguments": {}
}
}'papers_searchReturns a paginated list of papers, either browsed by publication date or matched against a text query. Call it to find papers by keyword, boolean expression, category, or date window. Combining a search with any sort other than relevance returns HTTP 400; invalid query parameters also return 400, and unexpected failures return 500.
Use cases
- Search papers by keyword
- Browse recent papers by publication date
- Filter papers by category and date range
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Free-text phrase to match against papers. |
| boolean_search | string | no | — | Boolean query expression; when supplied it takes precedence over search. |
| category | string | no | — | Category to restrict results to. |
| date_from | string | no | — | Start of the publication date window, as an ISO date (YYYY-MM-DD). |
| date_to | string | no | — | End of the publication date window, as an ISO date (YYYY-MM-DD). |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| sort | string | no | enum: published_date, relevance | Result ordering; relevance is only valid together with a search. |
| order | string | no | enum: asc, desc | Default desc (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "papers_search",
"arguments": {}
}
}'patents
patents_aggregateFast pre-computed aggregate patent counts (patent_agg_* tables), grouped by year, CPC code and/or company - group_by accepts a comma-separated subset of 'year','cpc','company'. IMPORTANT: country and legal_status are NOT supported here (HTTP 400) - use patents.search for those. The year range defaults to the current year and the two preceding calendar years; pass publication_date_from/to to widen it. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>'; unresolved company values and unknown CPC prefixes return HTTP 400 naming the value (never silently dropped). meta.total_buckets is the number of buckets returned, not the number of groups. Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.search for listings and patents.yoy-growth for growth deltas.
Use cases
- patents per year for a company or CPC class
- CPC / company distribution within a portfolio (one call, multiple group_by values)
- quick portfolio sizing without fetching listings
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| group_by | string | no | — | Comma-separated subset of 'year', 'cpc', 'company' (e.g. 'year,company'; default 'year'). Each dimension produces one bucket per value with a 'count'. (default year) |
| company_id | string | no | — | Organization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored). |
| company_name | string | no | — | Resolved organization name, used as a fallback when company_id is not provided. |
| cpc_code | string | no | — | CPC classification code or prefix (e.g. 'A61K'). |
| include_descendants | string | no | enum: true, false | When true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only. (default true) |
| publication_date_from | string | no | — | YYYY-MM-DD; restricts the counted window (defaults to the current year and the two preceding calendar years). |
| publication_date_to | string | no | — | YYYY-MM-DD; restricts the counted window. |
| limit | integer | no | 1..500 | Maximum number of buckets to return (1-500, default 100). (range 1-500; default 100) |
| sort_by_count | string | no | enum: desc, asc | Sort buckets by count (default desc). (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_aggregate",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_aggregate",
"arguments": {}
}
}'patents_detailsRetrieve ONE patent's full record by its publication identifier (e.g. WO2021098789A1, EP3823456A1): abstract, inventors, classifications with CPC descriptions, family members, legal/priority/application dates, patent + NPL citations, graph-enriched citation counts, and resolved_assignees whose rows carry the full resolution chain (mention_id / direct_id / ultimate_id, with organization_id kept as the mention_id alias). Any of those ids is directly reusable as the company_id filter on patents.search / patents.aggregate / patents.yoy-growth - this closes the assignee -> portfolio chain. Responses use implicit 2xx (no success flag). Requires a Pro workspace (returns HTTP 402 otherwise).
Use cases
- full record for one patent by publication id
- citations, family members and legal status for a patent
- resolve a patent's assignee to an organization id for portfolio queries
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| patentId | string | yes | — | Patent publication identifier, e.g. WO2021098789A1 or EP3823456A1. Copy it from a patents.search result's patent_id; never construct or guess it. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_details",
"arguments": {
"patentId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_details",
"arguments": {
"patentId": "example"
}
}
}'patents_searchPaginated, filterable listing of patent publications using direct indexed filters (company/assignee, CPC classification prefix, publication date range, country, legal status) - no graph traversal. include_total is declared required so every call computes the exact meta.total the agent quotes; never quote a page length as a total. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>' and resolve to the company's full graph id cluster (raw mentions + ROR/LEI entities); an unresolved company value or unknown CPC prefix returns HTTP 400 naming the value - the filter is never silently dropped, so an empty result always means the portfolio is truly empty. Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.aggregate for counts, patents.yoy-growth for trends, and patents.details with a row's patent_id for the full enriched record.
Use cases
- list a company's patents (via company_id or company_name)
- patents under a CPC classification prefix (e.g. A61K for pharma)
- recent patent publications for an assignee
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| company_id | string | no | — | Organization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored). |
| company_name | string | no | — | Resolved organization name, used as a fallback when company_id is not provided; the server resolves it to an organization. |
| cpc_code | string | no | — | CPC classification code or prefix (e.g. 'A61K'). Combined with include_descendants to expand the prefix. |
| include_descendants | string | no | enum: true, false | When true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only. (default true) |
| publication_date_from | string | no | — | YYYY-MM-DD; matches patents published on or after this date. |
| publication_date_to | string | no | — | YYYY-MM-DD; matches patents published on or before this date. |
| country | string | no | — | Country code (case-insensitive; the server uppercases it). |
| legal_status | string | no | — | Legal status filter (case-insensitive). |
| page | integer | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | integer | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| sort | string | no | enum: publication_date, title | Sort field (default publication_date). (default publication_date) |
| order | string | no | enum: asc, desc | Sort direction (default desc). (default desc) |
| include_total | string | no | enum: true, false | Must be true. Computes the exact result count (meta.total) which the agent must quote as the total; a page length must never be presented as a total. (default false) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_search",
"arguments": {}
}
}'patents_yoy-growthYear-over-year patent growth by CPC code or company (dimension is required). Returns one row per group with oldCount (year_start), newCount (year_end), absolute change and percent change, sorted by growth or percent; percent is a fraction (0.35 = +35%). min_old_count (default 50) hides small groups - narrow with cpc_code / company_id or lower it. Defaults compare 2024 against 2025; pass year_start/year_end for other windows. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>'; unresolved company values and unknown CPC prefixes return HTTP 400 naming the value (never silently dropped). Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.aggregate for plain counts.
Use cases
- which CPC classes are growing fastest
- company patent growth between two years
- emerging vs. declining areas of a portfolio
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| dimension | string | yes | enum: cpc, company | Growth dimension (required): 'cpc' groups by CPC code, 'company' groups by company. |
| year_start | integer | no | 1900..2026 | Baseline year (default 2024). oldCount is the patent count in this year. (range 1900-2026; default 2024) |
| year_end | integer | no | 1900..2026 | Comparison year (default 2025). newCount is the patent count in this year. (range 1900-2026; default 2025) |
| cpc_code | string | no | — | Optional CPC restriction (e.g. 'A61K'). |
| company_id | string | no | — | Organization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored). |
| company_name | string | no | — | Organization name fallback when company_id is not provided. |
| include_descendants | string | no | enum: true, false | When true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only. (default true) |
| min_old_count | integer | no | min 0 | Only include groups with at least this many patents in year_start (default 50). (min 0; default 50) |
| limit | integer | no | 1..100 | Maximum number of groups to return (1-100, default 10). (range 1-100; default 10) |
| sort | string | no | enum: growth_desc, growth_asc, percent_desc, percent_asc | Sort order (default growth_desc). (default growth_desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_yoy-growth",
"arguments": {
"dimension": "cpc"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "patents_yoy-growth",
"arguments": {
"dimension": "cpc"
}
}
}'regulatory-approvals
regulatory_catalystsReturns upcoming regulatory catalyst events (patent expiries, exclusivity expiries, approvals) with per-type counts, the applied filters, and a generation timestamp. Call it to find scheduled regulatory milestones for a company or drug, filtered by sponsor, indication, drug names, LEI, or ticker. Requires at least one of sponsor, indication, drugNames, lei, or ticker; returns 400 if none is supplied or parameters are invalid, and 500 on failure.
Use cases
- Find upcoming patent and exclusivity expiries for a drug
- Look up regulatory catalysts for a company by ticker or LEI
- List approval events expected for an indication
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| sponsor | string | no | — | Company or organization name sponsoring the drug. |
| indication | string | no | — | Disease or therapeutic indication to match. |
| drugNames | string | no | — | Drug name or names to match. |
| windowDays | integer | no | 1..3650 | Range 1-3650; default 365 (range 1-3650; default 365) |
| limit | integer | no | 1..500 | Range 1-500; default 100 (range 1-500; default 100) |
| lei | string | no | — | Legal Entity Identifier of the company. |
| ticker | string | no | — | Stock ticker symbol of the company. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_catalysts",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_catalysts",
"arguments": {}
}
}'regulatory_drugs_similar-by-targetReturns the targets affected by a given drug plus other drugs that affect any of those same targets, along with counts. Use it to find drugs sharing a mechanism of action with a reference drug. Returns an empty target and similar-drug list when the drug has no known targets. Responds 400 for invalid query parameters or when the requested data is not loaded, and 500 on internal failure.
Use cases
- Find drugs that share targets with a reference drug
- List the targets of a drug and the other drugs hitting them
- Explore mechanism-of-action overlap between drugs
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | integer | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_drugs_similar-by-target",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_drugs_similar-by-target",
"arguments": {
"key": "example"
}
}
}'regulatory_landscapeReturns a regulatory landscape summary for the given filters, including the requested parameters echoed in metadata. Call it to survey the regulatory activity around a sponsor, indication, drug, region, or time window. Invalid query parameters return HTTP 400 with field-level details; other failures return HTTP 500.
Use cases
- Survey regulatory activity for an indication
- Compare regulatory landscape across US and EU regions
- Review a sponsor's regulatory footprint over recent years
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| sponsor | string | no | — | Sponsor name to filter the landscape by. |
| indication | string | no | — | Disease or therapeutic indication to filter by. |
| minYear | integer | no | — | Earliest year (four-digit) to include in the landscape. |
| region | string | no | enum: US, EU | Regulatory region to scope results to: US or EU. |
| drugNames | string | no | — | Drug name or names to filter the landscape by. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_landscape",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_landscape",
"arguments": {}
}
}'regulatory_organizations_family-treeReturns an organization's corporate family tree: the resolved root organization plus its ancestors and descendants up to the requested depth. Call it to trace parent companies and subsidiaries of a regulatory organization. Returns 404 if the key cannot be resolved to an organization, and 400 for invalid query parameters.
Use cases
- Trace parent companies of an organization
- List subsidiaries and descendants of an organization
- Map a corporate ownership hierarchy
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| depth | integer | no | 1..8 | Range 1-8; default 3 (range 1-8; default 3) |
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_organizations_family-tree",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_organizations_family-tree",
"arguments": {
"key": "example"
}
}
}'regulatory_organizations_subsidiary-approvalsReturns a paginated list of regulatory approvals linked to an organization and its subsidiaries, with metadata including total counts and the organization keys covered. Call it to see approvals across an organization's subsidiary structure, optionally including parent organizations. Returns 400 for invalid query parameters or when the requested organization data is not available, and 500 on internal failure.
Use cases
- List approvals across an organization and its subsidiaries
- Review subsidiary approvals for a parent company
- Page through regulatory approvals by organization
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| depth | integer | no | 0..8 | Range 0-8; default 3 (range 0-8; default 3) |
| include_ancestors | boolean | no | — | Default false (default false) |
| page | integer | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | integer | no | 1..5000 | Range 1-5000; default 20 (range 1-5000; default 20) |
| sort | string | no | enum: approval_date, updated | Default approval_date (default approval_date) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_organizations_subsidiary-approvals",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_organizations_subsidiary-approvals",
"arguments": {
"key": "example"
}
}
}'regulatory_profileReturns a regulatory profile for a named drug, including the regulatory information associated with it. Call it when you need regulatory details about a specific drug. Fails with HTTP 400 if the drug parameter is missing or invalid, and HTTP 500 if the profile cannot be produced or an internal error occurs.
Use cases
- Look up regulatory details for a drug
- Check a drug's regulatory profile by name
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| drug | string | yes | — | minimum length 1 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_profile",
"arguments": {
"drug": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_profile",
"arguments": {
"drug": "example"
}
}
}'regulatory_walkTraverses the regulatory graph from one or more starting nodes along specified edge types and returns the reached approvals plus a boundary and metadata. Call it to explore connected regulatory entities (e.g. approvals linked to a product or company) across multiple hops. Returns 400 if start or edges is empty, if parameters are invalid, or if a requested edge type is not available; returns 500 on internal failure.
Use cases
- Explore regulatory entities connected to a starting node
- Find approvals reachable through specific relationship types
- Traverse regulatory relationships in a chosen direction
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| start | string | yes | — | [comma-separated list] minimum length 1 |
| edges | string | yes | — | [comma-separated list] minimum length 1 |
| direction | string | no | enum: out, in, both | Default out (default out) |
| min_hops | integer | no | 0..64 | Range 0-64; default 1 (range 0-64; default 1) |
| max_hops | integer | no | 0..64 | Range 0-64; default 3 (range 0-64; default 3) |
| hydrate | boolean | no | — | Default false (default false) |
| limit | integer | no | 1..50000 | Range 1-50000; default 10000 (range 1-50000; default 10000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}'regulatory-approvals_detailsRetrieve ONE harmonised approval by its PUBLIC approval_id (FDA_ORANGE:020610, FDA_PURPLE:BLA125514, EMA:EU/1/20/1528 - copy it verbatim from the approval_id field of a Regulatory Approvals Search record; EMA ids contain slashes and are accepted raw or URL-encoded). Returns the application-level group - applicant_raw, record_url, label_indications, sponsors (direct entities; the full direct->ultimate hierarchy with canonical LEI/ROR ids in sponsors_chain), drugs with ChEMBL ids, indications - plus data.products[]: one entry per strength/form listing carrying the patents, exclusivity entries, TE code, pathway flags (orphan / biosimilar / generic / conditional / accelerated) and next patent/exclusivity expiries. Malformed identifiers return HTTP 400; unknown ids HTTP 404. The old internal _key lookup is no longer supported; for name-based drug lookups prefer regulatory.profile.
Use cases
- full approval record with patents and exclusivity entries
- verify pathway flags and linked entities for one approval
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | yes | — | Public approval identifier: FDA_ORANGE:020610, FDA_PURPLE:BLA125514 or EMA:EU/1/20/1528. Copy it exactly from the approval_id field of a Regulatory Approvals Search record; never construct, guess or transpose an internal _key. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_details",
"arguments": {
"id": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_details",
"arguments": {
"id": "example"
}
}
}'regulatory-approvals_historyLabel-change HISTORY for ONE approval, keyed by the public approval_id: an ascending list of versions, each with effective_time, previous_effective_time and changes[] - field-level diffs ({field, old_value, new_value, change_type: added|removed|modified}). Built from captured label diffs; when none exist it falls back to SPL version snapshots (indications-only diffs). An EMPTY history list is a normal HTTP 200 (no changes recorded - common for EMA records): report 'no recorded label changes', never an error and never a fabricated history. Unknown ids return HTTP 404; malformed ids HTTP 400. Implicit 2xx envelope.
Use cases
- how an FDA label's sections changed over time
- effective dates of label versions for one approval
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | yes | — | Public approval identifier (e.g. FDA_ORANGE:020610 or FDA_PURPLE:BLA125514), copied from a search record's approval_id. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_history",
"arguments": {
"id": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_history",
"arguments": {
"id": "example"
}
}
}'regulatory-approvals_labelFull current openFDA label for ONE FDA approval, keyed by the public approval_id (FDA_ORANGE:... / FDA_PURPLE:BLA...). Returns SPL metadata - setid, effective_time, brand_name, generic_name, manufacturer_name, product_type, route, dosage_form, active/inactive ingredients, marketing start/end dates - plus label_sections: an object keyed by section name (e.g. indications_and_usage, warnings, dosage_and_administration, adverse_reactions) whose values are the full section text (truncated per value in the agent trace). A 404 means either the approval id is unknown OR no openFDA label row exists for it (EMA approvals have no openFDA labels - that is a data gap, not an outage); a malformed id returns HTTP 400. Responses are implicit 2xx (no success flag). Prefer Regulatory Approvals Record for structure/flags; use this only when the user needs label TEXT.
Use cases
- label section text (indications, warnings, dosing) for one FDA approval
- openFDA SPL metadata (setid, effective_time, ingredients) for an approval
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| id | string | yes | — | Public approval identifier in FDA_ORANGE:020610 or FDA_PURPLE:BLA125514 form, copied from a search record's approval_id. EMA ids parse but have no openFDA labels (404). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_label",
"arguments": {
"id": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_label",
"arguments": {
"id": "example"
}
}
}'regulatory-approvals_searchPaginated search and listing of harmonised regulatory approval RECORDS (FDA Orange Book, FDA Purple Book, EMA). Supports full-text search plus exact, partial-match and linked-id filters, all AND-combined. Returns transformed records with resolved sponsors (direct entities; full sponsors_chain), drugs with ChEMBL ids, indications, regulatory flags, patents and exclusivity entries. Each record's 'approval_id' - public SOURCE:number form, e.g. FDA_ORANGE:020610 / EMA:EU/1/20/1528 - is the identifier the Regulatory Approvals Record, Label and History tools expect; the internal _key is no longer returned, so never use it. Use for applicant / trade name / ingredient lookups and orphan or marketing-status filters; use regulatory.profile for a curated single-drug profile and regulatory.landscape for aggregated multi-drug views.
Use cases
- list approvals for an applicant, trade name or ingredient
- filter approvals by source (FDA/EMA), marketing status or orphan designation
- approvals linked to a sponsor, drug (ChEMBL) or disease (CURIE) id
- inspect patents and exclusivity entries behind an applicant's approvals
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| search | string | no | — | Full-text search across trade name, applicant and ingredient (language-analyzed). Prefer the exact/partial filters below for precise matches. |
| source | string | no | enum: FDA_ORANGE, FDA_PURPLE, EMA, EMA Union Register | Approval source registry to filter by. 'EMA' and 'EMA Union Register' are equivalent ('EMA' is normalized server-side). |
| applicant | string | no | — | Case-insensitive partial match against the applicant company name. Does NOT expand to a corporate family - subsidiaries must be queried separately or via a resolved sponsor id. |
| trade_name | string | no | — | Case-insensitive partial match against the trade (brand) name. Get one via the Regulatory Approvals Record tool. |
| ingredient | string | no | — | Case-insensitive partial match against the active ingredient(s). |
| sponsor_id | string | no | — | Sponsor entity id; exact membership filter against the record's linked sponsor ids. |
| drug_id | string | no | — | ChEMBL-style drug id (e.g. CHEMBL1201599); exact membership filter against the record's linked drug ids. |
| disease_id | string | no | — | Disease ontology CURIE (e.g. MONDO:0004975); exact membership filter against the record's linked disease ids. Get CURIEs from the Disease Autocomplete tool. |
| status | string | no | — | Exact match against the record's marketing status (e.g. Rx, OTC, Disc). |
| is_orphan | boolean | no | — | Filter by orphan-drug designation. CAVEAT: the server coerces the query string to boolean, so 'false' is treated as true - this filter can only SELECT orphans, never exclude them (do not use it for 'non-orphan' searches). |
| page | number | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | number | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| sort | string | no | enum: approval_date, updated_at | Sort field: approval_date (default) or updated_at. (default approval_date) |
| order | string | no | enum: asc, desc | Sort direction (default desc). (default desc) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_search",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "regulatory-approvals_search",
"arguments": {}
}
}'researchers
researchers_profileProfile document for a researcher (principal investigator) resolved to an OpenAlex author. Use trial documents or pi_author_id results from the registry search to obtain an author id. The author id must come from a real source - there is no name-to-id resolution, so never invent one; invalid id formats return HTTP 400 and an id not in the resolved-researcher registry returns HTTP 404.
Use cases
- profile for a principal investigator
- metadata for an OpenAlex author id
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| authorId | string | yes | — | OpenAlex author id; prefer the flat forms A5027151969 or openalex_A5027151969 (the https URL form is accepted but gets URL-encoded on the wire). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "researchers_profile",
"arguments": {
"authorId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "researchers_profile",
"arguments": {
"authorId": "example"
}
}
}'researchers_worksPaginated publication list (OpenAlex works) for a researcher already resolved to an OpenAlex author: title, full DOI url, type, publication_date, publication_year, venue, cited_by_count, is_open_access. Use this for 'what has this PI published', citation-impact and publication-trend questions about one author; use Researcher Profile instead for identity metadata, h-index and trial counts. The author id must come from a real source - the Trial Full Record tool's data.researchers[].author_key, a Researcher Profile result, or the user - there is no name-to-id resolution, so never invent one. meta.totalItems is the exact count for the applied filters (quote it; never recount a page). NO abstracts are returned here (they belong to the deferred works detail endpoint) - do not claim to have abstracts from this tool.
Use cases
- list a principal investigator's publications (most-cited or most-recent first)
- the publications behind a trial's PI (trial -> PI -> publications chain)
- citation-impact view of one researcher's body of work
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| page | integer | no | min 1 | Page number (default 1). (min 1; default 1) |
| limit | integer | no | 1..100 | Results per page (1-100, default 20). (range 1-100; default 20) |
| sort | string | no | enum: publication_date, cited_by_count | Sort field (default publication_date). cited_by_count = citation impact; publication_date = chronology. (default publication_date) |
| order | string | no | enum: asc, desc | Sort direction (default desc). (default desc) |
| publication_date_from | string | no | — | YYYY-MM-DD; matches works published on or after this date. Must be <= publication_date_to - an inverted window returns HTTP 400. |
| publication_date_to | string | no | — | YYYY-MM-DD; matches works published on or before this date. |
| type | string | no | — | OpenAlex work type, case-insensitive (common values: article, review, preprint, conference-paper, book-chapter, editorial, letter). Unknown values are rejected with HTTP 400. |
| authorId | string | yes | — | OpenAlex author id of a researcher resolved by the pipeline; prefer the flat forms A5027151969 or openalex_A5027151969 (the https URL form is accepted but gets URL-encoded on the wire). |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "researchers_works",
"arguments": {
"authorId": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "researchers_works",
"arguments": {
"authorId": "example"
}
}
}'resolution
resolution_autocompleteReturns a ranked list of entity name suggestions matching a partial query, with metadata including the normalized query, entity type, sort order, count returned, and elapsed time. Call it to power type-ahead or name-picker UIs across organizations, drugs, diseases, targets, and pathogen factors. Returns 400 for invalid parameters or an unknown type/sort, and 503 when the resolution index is unavailable on the deployment.
Use cases
- Power type-ahead suggestions for an entity name search
- Find candidate entity names matching a partial string
- Suggest organizations, drugs, diseases, targets, or pathogen factors by prefix
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| q | string | no | — | minimum length 1; maximum length 200 |
| query | string | no | — | minimum length 1; maximum length 200 |
| type | string | no | enum: organization, drug, disease, target, pathogen_factor | Default organization (default organization) |
| sort | string | no | — | maximum length 50 |
| limit | integer | no | 1..50 | Range 1-50; default 10 (range 1-50; default 10) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "resolution_autocomplete",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "resolution_autocomplete",
"arguments": {}
}
}'sponsors
sponsors_profileConsolidated company dossier for one public pharma/biotech sponsor, resolved by SEC ticker: identity (name, LEI/ROR/CIK, isPublic), financial metrics (cash, burn, runway), clinical activity (total/active trials, byPhase, top conditions/interventions, pipeline drugs, recent trial updates), regulatory footprint (total approvals, top approved drugs, patent expirations), upcoming PDUFA catalysts, and recent SEC filings. Prefer this single call for company-level overviews; use financials.metrics only for raw cash/burn/runway questions and the clinical / regulatory domain tools when full listings are needed - this returns summarized counts and top items, not exhaustive lists. Requires a Pro workspace (returns HTTP 402 otherwise); an unresolved ticker returns HTTP 404.
Use cases
- full profile of a public biotech/pharma company in one call
- upcoming PDUFA catalysts and patent expirations for a sponsor
- company snapshot combining financials, trial activity and approvals
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| ticker | string | yes | — | SEC stock ticker, case-insensitive (e.g. 'PFE', 'MRNA'). Invalid or unresolved tickers return HTTP 404. |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sponsors_profile",
"arguments": {
"ticker": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sponsors_profile",
"arguments": {
"ticker": "example"
}
}
}'supply-chain
supply-chain_dmfReturns a list of drug master file (DMF) records. Call it to browse or look up DMF entries. An empty list is a valid result, not an error.
Use cases
- List drug master file records
- Browse DMF entries
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_dmf",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_dmf",
"arguments": {}
}
}'supply-chain_dmf_detailsReturns the details of a single drug master file (DMF) identified by its key. Call it when you already have a DMF key and need that record's full details.
Use cases
- Look up a drug master file by key
- Fetch DMF details for a known record
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_dmf_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_dmf_details",
"arguments": {
"key": "example"
}
}
}'supply-chain_ema-gmdpReturns a list of records from the EMA good manufacturing and distribution practice (GMDP) dataset. Call it to retrieve EMA GMDP entries; the response is a list and an empty result is not an error. Requests are rate limited per day, and exceeding the limit returns an error.
Use cases
- List EMA GMDP records
- Retrieve EMA good manufacturing practice entries
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_ema-gmdp",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_ema-gmdp",
"arguments": {}
}
}'supply-chain_ema-gmdp_detailsReturns the full record for a single EMA good manufacturing and distribution practice (GMDP) entry identified by its key. Call it when you already have a key from a list or search result and need the complete details. Fails with a not-found status if no entry matches the key.
Use cases
- Fetch full details of an EMA GMDP record by key
- Look up a manufacturing or distribution practice entry from a known key
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_ema-gmdp_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_ema-gmdp_details",
"arguments": {
"key": "example"
}
}
}'supply-chain_enforcementReturns a list of supply-chain enforcement records. Call it to retrieve enforcement actions relevant to regulatory or supply-chain compliance. Requests are rate limited per day; exceeding the limit returns an HTTP 429 error.
Use cases
- List supply-chain enforcement actions
- Review regulatory enforcement records
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_enforcement",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_enforcement",
"arguments": {}
}
}'supply-chain_enforcement_detailsReturns the full details of a single supply-chain enforcement record identified by its key. Call it when you already have an enforcement key and need the complete record rather than a summary. Fails with a not-found status if no record matches the key.
Use cases
- Look up a supply-chain enforcement record by key
- Fetch full details for a known enforcement entry
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_enforcement_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_enforcement_details",
"arguments": {
"key": "example"
}
}
}'supply-chain_establishmentsReturns a list of establishment records from the supply-chain dataset. Call it to retrieve establishments for display or lookup. Rate-limited per day; exceeding the limit returns an HTTP error.
Use cases
- List supply-chain establishments
- Retrieve establishment records
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_establishments",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_establishments",
"arguments": {}
}
}'supply-chain_establishments_detailsReturns the full detail record for a single supply-chain establishment identified by its key. Call it when you already have an establishment key and need that establishment's details. Fails with an error status if the key is unknown or the request exceeds the daily rate limit.
Use cases
- Look up an establishment by its key
- Fetch details for a known supply-chain establishment
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_establishments_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_establishments_details",
"arguments": {
"key": "example"
}
}
}'supply-chain_facilities_drilldownReturns a drilldown view of a single supply-chain facility identified by its FEI. Call it when you already have a facility FEI and need its detailed breakdown. Returns 400 if the FEI is empty, 404 if no facility matches the FEI, and 500 on an internal failure.
Use cases
- Get facility details by FEI
- Inspect a supply-chain facility's breakdown
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| fei | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_facilities_drilldown",
"arguments": {
"fei": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_facilities_drilldown",
"arguments": {
"fei": "example"
}
}
}'supply-chain_facilities_globeReturns a list of supply-chain facilities with their geographic locations, plus metadata giving the returned count, the total available, and whether the result was truncated. Call it to map or browse facility locations across regions. Invalid query parameters return HTTP 400; other failures return HTTP 500.
Use cases
- Map supply-chain facility locations
- Browse facilities by geography
- List facility sites for a region
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| limit | integer | no | 1..50000 | Range 1-50000; default 20000 (range 1-50000; default 20000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_facilities_globe",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_facilities_globe",
"arguments": {}
}
}'supply-chain_inspectionsReturns a list of inspection records. Call it to retrieve inspections, for example to review regulatory inspection activity. No parameters are accepted.
Use cases
- List inspection records
- Review regulatory inspections
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_inspections",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_inspections",
"arguments": {}
}
}'supply-chain_inspections_detailsReturns the full detail record for a single supply-chain inspection identified by its key. Call it when you already have an inspection key and need its complete details. Fails with a not-found status if no inspection matches the key.
Use cases
- Look up a supply-chain inspection by key
- Fetch full details for a known inspection record
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_inspections_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_inspections_details",
"arguments": {
"key": "example"
}
}
}'supply-chain_searchReturns a paginated list of supply-chain records matching a full-text query, with metadata including total item count, total pages, and whether more results exist. Use it to find establishments, sponsors, or related records by keyword and to narrow results by risk class, country, sponsor, mention, exclusion status, or date ranges. Invalid query parameters return 400; an unavailable search capability returns 503; other failures return 500.
Use cases
- Search supply-chain records by keyword
- Filter establishments by risk class and country
- Find records updated since a given date
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| risk_class | string | no | — | Risk classification to filter records by. |
| country | string | no | — | Country to filter records by. |
| sponsor | string | no | — | Sponsor name to filter records by. |
| mention | string | no | — | Text mention to filter records by. |
| exclusion | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| record_date_after | string | no | — | Lower bound on record date, as an ISO date (YYYY-MM-DD). |
| record_date_before | string | no | — | Upper bound on record date, as an ISO date (YYYY-MM-DD). |
| updated_since | string | no | — | Only return records updated on or after this date, as an ISO date (YYYY-MM-DD). |
| sort | string | no | enum: record_date, updated | Default record_date (default record_date) |
| order | string | no | enum: asc, desc | Default desc (default desc) |
| page | number | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | number | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| q | string | yes | — | minimum length 1 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_search",
"arguments": {
"q": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_search",
"arguments": {
"q": "example"
}
}
}'supply-chain_walkTraverses the supply-chain graph from one or more starting nodes along the given edge types and returns the reached records plus a boundary and metadata. Call it to explore upstream or downstream relationships (suppliers, customers, dependencies) from known entities. Returns 400 when start or edges is empty or parameters are invalid, and 500 on internal failure.
Use cases
- Trace upstream suppliers from a company
- Explore downstream customers from a product
- Find multi-hop dependencies between entities
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| start | string | yes | — | [comma-separated list] minimum length 1 |
| edges | string | yes | — | [comma-separated list] minimum length 1 |
| direction | string | no | enum: out, in, both | Default out (default out) |
| min_hops | integer | no | 0..64 | Range 0-64; default 1 (range 0-64; default 1) |
| max_hops | integer | no | 0..64 | Range 0-64; default 3 (range 0-64; default 3) |
| hydrate | boolean | no | — | booleans arrive as strings - send 'true' or 'false'; value is parsed from the raw query string and coerced server-side |
| limit | integer | no | 1..50000 | Range 1-50000; default 10000 (range 1-50000; default 10000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "supply-chain_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}'trials-map
trials-map_hubsReturns the hub locations shown on the trials map, optionally narrowed by a search term and a stage. Call it to populate the map's hub markers or to see which hubs match a given search and stage. Returns HTTP 500 with error "Map Load Failed" if the map data cannot be loaded.
Use cases
- Load hub markers for the trials map
- Find map hubs matching a search term
- Filter map hubs by stage
Parameters
No parameters.
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs",
"arguments": {}
}
}'trials-map_hubs_sitesReturns the trial sites for a hub city, optionally filtered by country, search term, stage, and coordinates. Call it to drill into a city's site locations on the trials map. Returns HTTP 500 with an error message if the drilldown data cannot be fetched.
Use cases
- List trial sites for a hub city
- Drill into a city's sites filtered by country or stage
- Find site locations near a coordinate within a city
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| city | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs_sites",
"arguments": {
"city": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs_sites",
"arguments": {
"city": "example"
}
}
}'trials-map_hubs_sites_trialsReturns the trials associated with a specific site within a city, with status and phase normalized. Call it to list trials for a named facility shown on the trials map. Optional query filters narrow by country, search term, and stage. Fails with 500 if the trials cannot be fetched.
Use cases
- List trials at a named site in a city
- Filter a site's trials by country or stage
- Look up trials for a facility on the trials map
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| city | string | yes | — | — |
| siteName | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs_sites_trials",
"arguments": {
"city": "example",
"siteName": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "trials-map_hubs_sites_trials",
"arguments": {
"city": "example",
"siteName": "example"
}
}
}'virhostnet
virhostnet_factorsReturns a paginated list of viral/host factors, with each item plus metadata giving the current page, page size, total item count, and total page count. Call it to browse or enumerate factors, optionally narrowed to a single taxonomy. Invalid query parameters return HTTP 400; an unexpected server failure returns HTTP 500.
Use cases
- List viral and host factors
- Browse factors for a given taxonomy
- Page through the factor catalog
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| page | integer | no | min 1 | Min 1; default 1 (min 1; default 1) |
| limit | integer | no | 1..100 | Range 1-100; default 20 (range 1-100; default 20) |
| taxid | string | no | — | minimum length 1; maximum length 32 |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_factors",
"arguments": {}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_factors",
"arguments": {}
}
}'virhostnet_factors_detailsReturns the details of a single virus-host interaction factor identified by its key. Call it when you already have a factor key and need its full record. Responds 404 if no factor matches the key, and 500 on an internal failure.
Use cases
- Look up a virus-host factor by key
- Fetch details for a specific interaction factor
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_factors_details",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_factors_details",
"arguments": {
"key": "example"
}
}
}'virhostnet_targets_interactionsReturns the virus-host interactions associated with a single VirHostNet target, identified by its key. Call it to list the interactions recorded for a known target. Responds with 404 when no target matches the key and 500 on an internal failure.
Use cases
- List interactions for a VirHostNet target
- Look up virus-host interactions by target key
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| key | string | yes | — | — |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_targets_interactions",
"arguments": {
"key": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_targets_interactions",
"arguments": {
"key": "example"
}
}
}'virhostnet_walkReturns the boundary of a graph traversal starting from one or more nodes and following the given edge types, with traversal metadata. Call it to explore which nodes are reachable from a starting set within a hop range and direction. Fails with 400 when start or edges is empty, when query parameters are invalid, or when a requested edge type is not available; 500 on internal error.
Use cases
- Explore reachable nodes from a set of starting nodes
- Find neighbors of a virus or host across selected relationship types
- Traverse relationships in a chosen direction within a hop range
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
| start | string | yes | — | [comma-separated list] minimum length 1 |
| edges | string | yes | — | [comma-separated list] minimum length 1 |
| direction | string | no | enum: out, in, both | Default out (default out) |
| min_hops | integer | no | 0..64 | Range 0-64; default 1 (range 0-64; default 1) |
| max_hops | integer | no | 0..64 | Range 0-64; default 3 (range 0-64; default 3) |
| limit | integer | no | 1..50000 | Range 1-50000; default 10000 (range 1-50000; default 10000) |
Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}curl
curl -sS https://app.caelrith.com/api/v1/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "x-api-key: $CAELRITH_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "virhostnet_walk",
"arguments": {
"start": "example",
"edges": "example"
}
}
}'Generated 2026-10-28 from a live tools/list call. Tool count: 92. Rerun npm run mcp:docs to refresh.