MediSearch Evidence APIv1.0.0

Search peer-reviewed literature, clinical practice guidelines and drug labels. Responses contain ranked source passages with citation metadata. No text is generated.

EndpointURL
RESThttps://evidence.medisearch.io/v1/evidence/search
MCPhttps://evidence.medisearch.io/mcp
OpenAPI 3.1https://evidence.medisearch.io/openapi.json
Vocabularieshttps://evidence.medisearch.io/v1/filters

Quickstart

curl https://evidence.medisearch.io/v1/evidence/search \
  -H "Authorization: Bearer $MEDISEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "At what age should colorectal cancer screening start?",
    "max_results": 5,
    "filters": {
      "source_types": ["guideline"],
      "guideline": {"countries": ["US"]}
    }
  }'

Authentication

Send your API key with every request to /v1/evidence/search and /mcp, in either header:

Authorization: Bearer <API_KEY>
X-API-Key: <API_KEY>

Missing or invalid keys return 401. Keys are issued by MediSearch; request one at founders@medisearch.io. /, /reference, /openapi.json, /v1/filters* and /healthz are public.

Rate limits

Limits are set per key; the default is 60 requests per minute. Authenticated responses include X-RateLimit-Limit and X-RateLimit-Remaining. Excess requests return 429 with Retry-After. For a higher limit, contact founders@medisearch.io. The service scales to zero; the first request after a period of inactivity takes longer while it starts.

POST /v1/evidence/search · JSON body:

FieldTypeRequiredDescription
questionstring, 3–2000 charsyesSelf-contained question, any language.
max_resultsinteger, 1–30no (10)Sources to return, each a different publication, ordered by relevance. Fewer only when fewer publications match the filters.
passage_charsinteger, 0–6000no (1200)Maximum passage length, cut at a sentence boundary; 0 omits passages.
filtersobjectnoSee Filters.

Results are ordered by relevance. Each publication appears at most once.

Optional search hints

Most requests need only question. These fields can improve results for follow-ups, multi-part questions and exact names:

FieldTypeDescription
rerank_querystringSelf-contained version of the question, used instead of question when question holds a literal follow-up.
topic_querystringThe topic phrased like a guideline or review title (condition and decision, no patient specifics), e.g. pulmonary embolism anticoagulation guideline recommendations. Helps surface guidelines and reviews on the topic.
dense_queriesstring[], ≤3Alternative phrasings or sub-questions, e.g. one per drug in a comparison.
keyword_queriesstring[], ≤3Exact terms to match: drug and brand names, gene symbols, trial acronyms.

Filters

All optional. Filters combine with AND; values within one filter combine with OR. Unknown values return 422 with suggestions. Nested fields live under filters, e.g. filters.guideline.countries.

FieldValuesNotes
year_start, year_endintegerPublication year, inclusive.
source_typesguideline, research_article, drug_informationOmit for all.
study_types5 valuesApplies to research_article only; guidelines and drug information still match unless excluded by source_types.
specialties63 valuesUntagged documents are excluded.
languages65 ISO 639-1 codesDocument language.
organizations1093 codesCase-insensitive; exact full names accepted. Matches guidelines and drug information only.
guideline.countries162 country codesSee country matching. GB is an alias of UK.
guideline.include_reference_bodiesbooleanSee country matching.
drug_information.countries162 country codesCountry of approval, e.g. US for FDA labels.

Study types

ValueIncludes
systematic_reviewSystematic reviews and meta-analyses, including network meta-analyses, umbrella and living reviews, and overviews of reviews.
randomized_trialRandomized clinical trials, including secondary, subgroup and follow-up analyses of completed trials.
primary_researchOther original research: observational studies (cohort, case-control, cross-sectional, registry, survey, qualitative), non-randomized intervention studies, laboratory, animal and preclinical studies, methods, models and datasets.
case_reportCase reports and small case series.
otherNarrative, scoping and rapid reviews, clinical overviews, editorials, commentaries, letters, errata, policy statements, book chapters and conference abstracts.

Country matching

guideline.countries: ["DE"] matches guidelines issued in Germany, guidance issued for Europe as a whole, and international bodies (region global, e.g. WHO, Cochrane, KDIGO). With include_reference_bodies: true it also matches:

US CDC, FDA, NIH, USPSTF, NCI, AHRQ, VA/DoD, AHA, ACC, HRS, ASCO, NCCN, ACS-Onc, ASTRO, IDSA, ADA, ES, AACE, ACP, AAFP, AAP, ACOG, AGA, ACG, AASLD, ASGE, ATS, CHEST/ACCP, SCCM, AAN, ACR, APA, ASH, AUA

EU/UK EMA, ECDC, ESC, EACTS, ESVS, ESMO, ESTRO, ERS, EASL, ESGE, ECCO, UEG, EULAR, EAU, ESCMID, EACS, EAN, ESO, ESICM, EHA, ESE, ESHRE, EAACI, NICE, SIGN, BTS, RCOG

Looking up values

The reference page lists every value. As JSON (public):

GET https://evidence.medisearch.io/v1/filters
GET https://evidence.medisearch.io/v1/filters/organizations?q=kardio&country=DE

Response

Top level: request_id, question, rerank_query, result_count, latency_ms, filters_applied, results[]. Each result:

FieldDescription
rank1-based position.
relevance_scoreRelevance in [0, 1]; higher is more relevant.
source_typeguideline | research_article | drug_information
document_typesCorpus labels, e.g. systematic_review.
title, year, authors, journalBibliographic metadata. authors is truncated to 12 plus et al.
urlCanonical link to the publication.
deep_linkurl with a text fragment highlighting the passage, when available.
organization{code, name} of the issuing body (guidelines, drug labels).
passage, passage_kind, sectionMatching text; passage | table | figure | list; section path.
citationPlain-text citation: authors (year). title. journal. url
{
  "question": "At what age should colorectal cancer screening start?",
  "result_count": 1,
  "filters_applied": {
    "source_types": [
      "guideline"
    ],
    "guideline": {
      "countries": [
        "US"
      ]
    },
    "...": "..."
  },
  "results": [
    {
      "rank": 1,
      "relevance_score": 0.9442,
      "source_type": "guideline",
      "document_types": [
        "guideline"
      ],
      "title": "Colorectal cancer screening: An update to the American Cancer Society guideline, 2026.",
      "url": "https://pubmed.ncbi.nlm.nih.gov/42200680/",
      "deep_link": "https://pubmed.ncbi.nlm.nih.gov/42200680/#:~:text=…",
      "year": 2026,
      "authors": [
        "Andrew M D Wolf",
        "Richard M Hoffman",
        "…"
      ],
      "journal": "CA: a cancer journal for clinicians",
      "organization": {
        "code": "ACS-Onc",
        "name": "American Cancer Society"
      },
      "passage": "… In 2018, the American Cancer Society (ACS) lowered the recommended age to initiate screening for average-risk adults to age 45 years. …",
      "passage_kind": "passage",
      "section": null,
      "citation": "Andrew M D Wolf et al. (2026). Colorectal cancer screening: An update to the American Cancer Society guideline, 2026. CA: a cancer journal for clinicians. https://pubmed.ncbi.nlm.nih.gov/42200680/"
    }
  ]
}

MCP

Streamable HTTP transport, stateless: POST JSON-RPC 2.0 messages to https://evidence.medisearch.io/mcp and read a JSON response. No session or SSE stream; GET returns 405. Protocol versions 2025-06-18, 2025-03-26, 2024-11-05. Authentication as above.

ToolClassificationDescription
search_medical_evidenceReadSearch. Returns content[0].text (numbered source list) and structuredContent (the REST response).
list_evidence_filter_optionsReadFilter values. Optional organization_search, country, region, limit return matching organizations.

Both tools are reads with no side effects: they do not create, change or delete data, act on a user's behalf, or require user permissions. Neither is a sensitive action. Calls are stateless and safe to retry. MCP annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true.

Search arguments are the REST fields, flattened:

MCP argumentREST field
question, max_results, passage_chars, rerank_query, topic_query, dense_queries, keyword_queriesSame name, top level
year_start, year_end, source_types, study_types, specialties, languages, organizationsSame name under filters
guideline_countriesfilters.guideline.countries
guideline_include_reference_bodiesfilters.guideline.include_reference_bodies
drug_label_countriesfilters.drug_information.countries

Claude

In claude.ai, Claude Desktop, Claude mobile or Cowork: Settings → Connectors → Add custom connector, name MediSearch, URL https://evidence.medisearch.io/mcp, no authentication. Both tools then appear in the conversation's tool menu. In Claude Code: claude mcp add --transport http medisearch https://evidence.medisearch.io/mcp --header "Authorization: Bearer <API_KEY>".

Client configuration

{
  "mcpServers": {
    "medisearch": {
      "type": "http",
      "url": "https://evidence.medisearch.io/mcp",
      "headers": {
        "Authorization": "Bearer <API_KEY>"
      }
    }
  }
}

Examples

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_medical_evidence",
    "arguments": {
      "question": "At what age should colorectal cancer screening start?",
      "source_types": [
        "guideline"
      ],
      "guideline_countries": [
        "US"
      ],
      "max_results": 5
    }
  }
}
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_evidence_filter_options",
    "arguments": {
      "organization_search": "cardio",
      "country": "DE"
    }
  }
}

Invalid tool arguments and search failures return a result with isError: true and a readable message naming each invalid argument, so the model can correct the call. Unknown tools and malformed requests return JSON-RPC errors (e.g. -32602).

Errors

REST errors have the body {"error": string, "detail": any}.

Status<code>error</code>Cause
401missing_api_key, invalid_api_keyNo key, or unknown key.
422invalid_requestValidation failed; detail lists {field, message}.
429rate_limitedPer-key limit exceeded; retry after Retry-After seconds.
503search_failedRetrieval backend unavailable; retry with backoff.
504search_timeoutSearch exceeded 45 s.