med-lit-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NCBI_EMAIL | Yes | Required for PubMed/PMC search and for fetching. Also sent to Unpaywall, which requires a contact email. Use a real address. | |
| S2_API_KEY | No | Alternative name for SEMANTIC_SCHOLAR_API_KEY. Enables Semantic Scholar by default. Without a key it shares a public rate limit that usually answers HTTP 429, so it is skipped unless requested. | |
| NCBI_API_KEY | No | Optional; raises NCBI rate limits. | |
| MED_LIT_STAGES | No | Optional, for advanced users. Exposes only the tools up to a stage: `search`, `screening`, `fetch` or `wiki` (default: all). For example, `fetch` hides the 11 wiki tools. Clients that load tools on demand rarely need this; it helps with clients that load every tool up front. Project, status and guide tools are always available. | |
| OPENALEX_API_KEY | No | Optional OpenAlex key. | |
| MED_LIT_STATE_DIR | No | Where the list of known projects is kept. Default: `$XDG_DATA_HOME/med-lit-mcp` or `~/.local/share/med-lit-mcp`. | |
| MED_LIT_PROJECTS_DIR | No | Where new projects are created when no path is given. Default: `~/med-lit`. | |
| SEMANTIC_SCHOLAR_API_KEY | No | Enables Semantic Scholar by default. Without a key it shares a public rate limit that usually answers HTTP 429, so it is skipped unless requested. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_projectB | Create a project: one folder per review, holding its wiki and (hidden) its data. |
| project_settingsA | Show or change a project's settings (med-lit.settings.json): research mode (basic, full or deep) and max_screened, search years, records per source, preprints, fetch limit and mode, pages per article, and more. Change them only as the researcher asks. |
| list_projectsA | List known projects with their folders. available=false means the folder moved or is missing. |
| open_projectA | Register an existing project folder, for example after it was moved or copied from elsewhere. |
| research_nextC | Start or continue a review: the next step from the question to the report, with |
| guideB | Rules and how-to for a stage: workflow, question, screening, fetch, wiki, extraction, duplicates, synthesis or ontology. |
| validate_questionA | Check a drafted PICO/PCC search question against the project's settings and return a question_id for start_search. Show the result, including settings, to the researcher and wait for approval. Rules: guide("question"). |
| start_searchA | Search the literature databases with an approved question; creates a run in the project. If search_status is 'running', call resume_search(run_id). |
| resume_searchA | Check a running search, retry a failed one, or retry just the failed sources of a completed run. |
| add_skipped_articlesA | Add articles that were skipped for having no DOI, PMID or PMCID. Use only when the researcher asks for them by name; they then need screening. |
| set_screening_criteriaB | Save the researcher's inclusion and exclusion criteria (and the reason for each) for screening. Rules: guide("screening"). |
| next_triage_batchA | Get untriaged titles with the question and criteria, to score 0-3 before screening. |
| record_triage_scoresA | Record the 0-3 title scores that decide which articles each session screens. |
| next_screening_batchC | Get the next titles/abstracts of this session (20 best-triaged articles) with the criteria. |
| record_screening_decisionsB | Record screening decisions; include/exclude need a verbatim quote as evidence. |
| review_articleB | Record the researcher's own include/exclude decision and reason for one article. |
| fetch_articlesB | Fetch full text of included articles (PMC, Unpaywall open access, else abstract); repeat while remaining > 0. Rules: guide("fetch"). |
| next_reportC | Get what the report is written from: the question, the search and screening facts, and the included articles' evidence, in portions (repeat while remaining > 0). Reads only (may create the project database). Rules: guide("report"). |
| record_reportB | Save the report answering the question: citations and quotes are checked against the stored articles, and the methods and study list are added from the run's record. Reply with its message. Rules: guide("report"). |
| record_evaluationB | Deep mode: record whether this round's evidence is enough; if not, the revised question is searched into the same review and the next round begins. Rules: guide("evaluation"). |
| wiki_tasksA | Start here to build or update the wiki: the current step as self-contained tasks (each with its full rules and the tools it may use), sized for one fresh subagent; a long step comes in portions. Rules: guide("wiki"). |
| next_wiki_articleA | Get the next unextracted page of article text (a JSON header plus the page); it repeats until record_extraction records it. An article whose text changed loses its old extraction first. |
| get_article_pageA | Re-read one page of a fetched article within its extraction allowance (the project's wiki.max_pages), e.g. to check a quote; next_wiki_article serves the pages still to extract. Reads only (may create the project database). |
| record_extractionB | Record the entities and relationships extracted from one page (re-recording replaces it). Rules: guide("extraction"). |
| find_entitiesA | Search a project's wiki entities by name, alias, acronym, or spelling variant, e.g. to reuse an entity's id while extracting. Reads only (may create the project database). |
| list_duplicate_candidatesA | List pending entity pairs that may be the same thing, with an example mention of each; decide them with resolve_duplicates. Reads only (may create the project database). |
| resolve_duplicatesA | Decide pairs from list_duplicate_candidates: merge (irreversible; keep picks the survivor) or distinct (not suggested again). Rules: guide("duplicates"). |
| merge_entitiesA | Merge entities into one (irreversible), and/or rename or retype an entity, by id. For pairs from list_duplicate_candidates use resolve_duplicates. |
| next_synthesisB | Get the next entity whose wiki page needs writing or updating, with its evidence; it repeats until record_synthesis saves it. Rules: guide("synthesis"). |
| record_synthesisA | Save an entity page from next_synthesis, replacing the stored one: a new page, or only the changed sections of an update. Rules: guide("synthesis"). |
| export_wikiB | Rewrite every Markdown page of a project's wiki (entities, sources, index, log) from its database. |
| list_runsA | List a project's searches (runs), newest first. |
| get_run_statusA | Show a run's progress in every stage and the available next steps; check it rather than chat history. Reads only (may create the project database). |
| list_articlesB | List a run's articles with their screening, fetch, and wiki status. |
| bot_startA | Begin a scheduled bot run: lock the project and search its look-back window for new articles. |
| bot_nextA | Advance a bot run after bot_start: returns the next step (wait, triage, screen, fetch, wiki or
finish) with a |
| bot_finishA | End a bot run: refresh the wiki, write the update report, and return the message to reply with. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| research_question | Answer a research question with a reviewed literature search and a report (basic, full or deep). |
| plan_search | Draft and validate a structured search for a research question. |
| screen_run | Screen a run's search results against criteria. |
| build_wiki | Build the evidence-linked wiki for a run's fetched articles. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 37 tools
Most tools target a distinct workflow stage or resource, and descriptions clarify next/record pairings (e.g., next_triage_batch vs. record_triage_scores, next_report vs. record_report). Some boundaries are still fuzzy: review_article vs. record_screening_decisions both record include/exclude judgments, and merge_entities vs. resolve_duplicates overlap in entity-merging intent. These are manageable because the descriptions point to the intended tool.
Names are consistently snake_case and mostly follow verb_noun or stage_resource patterns (start_search, record_extraction, next_synthesis, bot_finish). Minor deviations exist: project_settings and wiki_tasks are noun phrases, guide is a bare verb, and next_* tools use an adjective_noun form rather than a verb. The convention is still predictable overall.
With 37 tools, the surface is very heavy, and many operations are split into granular next_* and record_* pairs that could be consolidated. The multi-stage systematic-review domain justifies breadth, but the current count exceeds what an agent can comfortably navigate and likely includes several low-frequency tools. This is over-scoped for practical tool selection.
The surface covers a full review lifecycle: project management, question validation, search/resume, triage and screening, fetch, extraction, entity resolution, synthesis, wiki export, reporting, and evaluation. Minor gaps remain, such as no explicit project update/delete or dedicated criteria-viewing operation, but agents can work around them through existing record/settings tools.