Skip to main content

Gene Expression Omnibus (GEO) MCP

GEO Logo
Gene Expression Omnibus (GEO) - A public functional genomics data repository

PyPI version Python License MCP GEO

Status: Beta. The MCP stdio and HTTP servers are both functional and in day-to-day use. The public tool surface is stable for the 0.1.x line; internal APIs and config defaults may still evolve. Please open an issue if you hit a regression.

A Model Context Protocol (MCP) server for accessing GEO (Gene Expression Omnibus) data through NCBI E-Utils API. The tool will enable you to search for GEO datasets, series, samples, platforms, and profiles for your LLM. Tested with Claude Desktop, chatGPT has no out of the box support for this tool yet. Claude will automatically use the tools if it fits the context.

Quick Install (pip)

install from pip

pip install geo-mcp

install from source

git clone https://github.com/MCPmed/GEOmcp
cd GEOmcp
pip install -e .

Configuration

Run init to create a config file

geo-mcp --init

By default this writes to $XDG_CONFIG_HOME/geomcp/config.json (typically ~/.config/geomcp/config.json). If you already have a legacy ~/.geo-mcp/config.json from an older install, that location is still honored and --init will update it in place so nothing gets orphaned.

The file contains:

{
    "base_url": "https://eutils.ncbi.nlm.nih.gov/entrez/eutils",
    "email": "your_email@example.com",
    "api_key": "YOUR_API_KEY",
    "download_dir": "~/.local/share/geomcp/downloads"
}
  • email is required by NCBI.
  • api_key is optional but recommended for higher rate limits (get one here).

You can also skip the config file entirely and pass values via env vars (GEOMCP_EMAIL, GEOMCP_API_KEY, GEOMCP_BASE_URL, GEOMCP_DOWNLOAD_DIR) or CLI flags (--email, --api-key, --download-dir, ...). Precedence, highest wins: CLI flags → env vars → config.json → built-in defaults.

Running the Server

  • MCP stdio mode:
    geo-mcp
    
  • HTTP mode:
    geo-mcp --http --port 8001
    

Claude Desktop Integration

Common Issue: spawn geo-mcp ENOENT

This error means Claude Desktop cannot find the geo-mcp command. This is usually a PATH issue.

Solution

  1. Find the full path to the executable:

    which geo-mcp
    

    Example output: /Users/youruser/miniforge3/bin/geo-mcp

  2. Update your Claude config: Instead of just "geo-bio-mcp", use the full path:

    {
      "mcpServers": {
        "geo-mcp": {
          "command": "/Users/youruser/miniforge3/bin/geo-mcp",
          "env": {
            "CONFIG_PATH": "/Users/youruser/.geo-mcp/config.json"
          }
        }
      }
    }
    
  3. (Optional) Use a Conda Environment:

    • Activate your conda env and run which geo-mcp to get the correct path.
    • Use that path in your Claude config as above.
  4. Restart Claude Desktop after updating the config.


Troubleshooting

  • If you see command not found: geo-mcp, make sure you installed into the Python environment whose bin directory is on your PATH, or invoke the server with its full path.
  • If the config file is missing, geo-mcp --init will create one. You can also run without a config by setting GEOMCP_EMAIL in the environment.

HTTP API

With the server running via geo-mcp --http (default port 8001), the following endpoints are exposed:

  • GET / — server status
  • GET /health — health check
  • GET /tools — list all registered MCP tools
  • POST /tools/call — execute a tool with arguments
  • GET /events — server-sent events stream of tool calls
  • GET /docs — interactive Swagger UI

Examples

# List available tools
curl http://localhost:8001/tools

# Search GEO Series
curl -X POST http://localhost:8001/tools/call \
  -H "Content-Type: application/json" \
  -d '{
    "name": "search_geo_series",
    "arguments": {"term": "breast cancer", "retmax": 5}
  }'

Available Tools

This MCP server provides access to all major GEO databases through the following tools:

Search Tools

  • search_geo - Universal GEO search across GSE/GSM/GPL/GDS records, with results bucketed by accession type. Pass record_types to filter.

    • Example searches: "breast cancer", "GSE12345", "RNA-seq time course"
  • search_geo_profiles - Search gene expression profiles across different biological contexts

    • Example searches: "cancer", "breast cancer", "p53", "apoptosis"
  • search_geo_datasets - Search curated gene expression datasets

    • Example searches: "diabetes", "Alzheimer's disease", "drug response", "tissue specific"
  • search_geo_series - Search original submitter-supplied gene expression series

    • Example searches: "GSE12345", "microarray", "RNA-seq", "time course"
  • search_geo_samples - Search individual gene expression samples

    • Example searches: "GSM123456", "human", "mouse", "tumor", "normal"
  • search_geo_platforms - Search microarray platform definitions

    • Example searches: "Affymetrix", "Illumina", "Agilent", "GPL96"

Search Parameters

Each tool accepts:

  • term (required): Search term or query string
  • retmax (optional, default: 20): Maximum number of results to return

Example usage

For now just chat with claude desktop and it will use the tools automatically if it fits the context.

User: find a small brain dataset

Assistant: I'll help you find a small brain dataset from the GEO database. Let me search for brain-related datasets with a maximum of one result.

Assistant (system): search_geo_datasets

Assistant: I found a brain-related dataset for you:

  • Dataset: GSE290848
  • Title: Maternal Stress Triggers Early-Life Eczema via Fetal Mast Cell Reprogramming [10x Genomics Multiome ATAC + Gene Expression]
  • Species: Mouse (Mus musculus)
  • Samples: 8
  • Data type: ATAC-seq & gene expression (10x Genomics Multiome)
  • Publication date: 21 Jun 2025

This small dataset explores how prenatal stress affects neuro-immune circuits and mast-cell development.

Would you like me to download this dataset or search for others?


User: download GSE290848

Assistant: I'll download the GSE290848 dataset for you.

Assistant (system): download_geo_data

Assistant: Download complete.

Downloaded files

  • GSE290848_family.soft.gz — series, platform & sample info
  • GSE290848_metadata.xml — detailed study metadata

Location: ~/.local/share/geomcp/downloads/gse/GSE290848
Total size: 0.01 MB

The dataset is ready for analysis. Let me know if you’d like to explore it further.

Metadata

Release files for geo-mcp 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for geo-mcp 0.1.2
File Size Uploaded Provenance
geo_mcp-0.1.2.tar.gz 25.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for geo-mcp 0.1.2
File Interpreter ABI Platform
geo_mcp-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 47.2 kB

Release files / geo_mcp-0.1.2.tar.gz

Download URL geo_mcp-0.1.2.tar.gz
Size 25.9 kB
Tags Source
SHA-256 checksum
How to use checksums
62010ff7bc38af5ccfbb8f713bfe589945691d6192b1908ceb5d0505b47e7c39
BLAKE2b-256 checksum
How to use checksums
fc71142837c89f2b4abf4df41d84f2e5cdff8f7ba9e32463449295247d22ba87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Release files / geo_mcp-0.1.2-py3-none-any.whl

Download URL geo_mcp-0.1.2-py3-none-any.whl
Size 21.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
df7335e3ac4aa47fac9e82d5191b6ce1c1b7c826b25e4e21160c29826cb086e0
BLAKE2b-256 checksum
How to use checksums
8d9439eb0b4a22c042727fa1fc579b9f65600bfd8bb93ffa3f81912f4baef4fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Security for geo-mcp 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for geo_mcp-0.1.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page