Skip to main content
Glama

Odin MCP

Tests

A local Model Context Protocol server for researchers working with Odin SMR Level 2 observations. It provides cited analysis methods, dataset-layout guidance and optional read-only S3/Parquet tools to your AI application.

The server runs on your computer over stdio. Your AI application supplies the model; this package makes no LLM calls, needs no LLM API key, and does not submit AWS analysis jobs. Guidance and schema resources work without AWS credentials or network access after installation. Your AI application's model may still use a remote provider, including for tool results sent to it.

Requirements

  • CPython 3.10–3.14. Python 3.15 is not yet supported by this package's tested PyArrow stack. The source checkout defaults to Python 3.13.

  • An AI application with support for local MCP servers using stdio.

  • uv (recommended), or Python with pip in a virtual environment.

  • Internet access for installation unless dependencies are cached.

AWS access is optional and needed only for the direct observation-data tools.

Related MCP server: datamgr

Install

From a versioned release

Download a wheel from GitHub Releases. For version 0.1.0, install the published wheel in an isolated tool environment:

uv tool install --python 3.13 https://github.com/Odin-SMR/odin-mcp/releases/download/v0.1.0/odin_mcp-0.1.0-py3-none-any.whl

uv can install the requested Python version if it is missing. Run uv tool update-shell if needed, then restart your terminal so that odin-mcp is on PATH. You can also install the downloaded wheel with python -m pip install <wheel-file> inside a Python 3.10–3.14 virtual environment. The release includes a source distribution and SHA256SUMS for integrity checking. Wheels resolve compatible dependencies; use the source checkout and lockfile for the tested dependency versions.

Packages are distributed through GitHub Releases. Do not assume that an unrelated package with the same name on a package index is this implementation.

From source with locked dependencies

git clone https://github.com/Odin-SMR/odin-mcp.git
cd odin-mcp
uv python install 3.13
uv sync --locked --no-dev

For a specific release, check out its tag before syncing. The .venv environment contains the server and its runtime dependencies. To use another supported interpreter, pass --python 3.12 (for example) to uv sync.

The pip alternative is python -m pip install . in an activated virtual environment; that command does not use uv.lock.

Connect your AI application

Add a local MCP server in the application's settings:

Setting

Value

Name

odin-mcp

Transport

stdio

Command after tool installation

odin-mcp, or its absolute executable path

Arguments

None

Environment for guidance

None required

For a source installation, use /absolute/path/to/odin-mcp/.venv/bin/odin-mcp on Linux/macOS, or C:\path\to\odin-mcp\.venv\Scripts\odin-mcp.exe on Windows. Use a path in the environment where the client launches processes. A Windows application needs its supported WSL integration to launch a server installed in WSL.

For example, merge the following into VS Code's .vscode/mcp.json, replacing the command with your installed executable:

{
  "servers": {
    "odin-mcp": {
      "type": "stdio",
      "command": "/absolute/path/to/odin-mcp/.venv/bin/odin-mcp",
      "args": []
    }
  }
}

Other clients have different configuration formats. Follow your client's local MCP instructions; VS Code's guide explains its setup and tool-selection workflow. Start/enable the server and accept the client's normal trust prompt. Restart it after installing an update.

The client launches and manages the process. There is no HTTP port to expose and no separate terminal server to keep running. Running odin-mcp manually waits for MCP messages; it does not open a chat. From a source checkout, the equivalent launch is uv run --no-sync odin-mcp.

First conversation

Ask your assistant:

Use Odin's list_research_topics_tool to show the available analysis topics.

The bundled guide has eight topics, 15 plot recipes and 19 source records. Then try:

Use the Odin research guidance to explain the dataset layout and help me write a Python script comparing seasonal N2O profiles. Explain quality screening, sampling and uncertainty, and cite the sources. Use guidance tools only for now.

Give the assistant the generic LLM guide for a reusable workflow. It works as instructions for a capable client; it does not require a hosted Odin agent. Script execution and figure generation require a notebook or a client with code-execution capability. These knowledge tools do not run scientific analyses.

Capabilities

Tools

Purpose

Needs AWS access?

list_research_topics_tool()

Browse topics and citations

No

get_research_topic_tool(topic_id)

Read a complete topic

No

search_research_guidance_tool(query, limit=5)

Find up to eight cited snippets

No

list_partition_values_tool(...)

Discover S3 partition values

Yes

list_parquet_files_tool(...)

List Parquet objects

Yes

read_parquet_preview_tool(...)

Read a small row sample and schema

Yes

read_parquet_columns_tool(...)

Select columns and limit returned rows

Yes

Responses have ok: true with warnings and data, or ok: false with error. Search understands chemical subscripts such as N₂O. Read the full matched topic before using a method; short snippets can omit qualifications.

Resources:

  • odin://dataset/schema — machine-readable reference layout.

  • odin://dataset/schema/guide — human-readable field guidance.

  • odin://research/guide — research overview and navigation.

  • odin://research/catalog — topic index.

  • odin://research/sources — bibliography, source scope and checked dates.

  • odin://research/topics/{topic_id} — an individual topic.

The prompt plan_odin_analysis(question, product?) helps establish the selected product/version, screening, coordinates, sampling and uncertainty before plotting. The literature guide is a dated snapshot, not a live literature search or a validation of arbitrary measurements.

Optional direct data access

The existing data tools read s3://odin-level2 using an AWS profile already configured on the researcher's machine. The default name is odin; set ODIN_AWS_PROFILE in the MCP client's server environment to use another approved profile. The profile needs permission to list the intended bucket/prefixes and read selected objects. Use researcher-specific read-only access; never copy an administrator's credentials or put tokens in client configuration files, chat or Git.

No login is required for the bundled guidance. Anonymous published-data access is available separately through odin-smr.org and its Parquet guide; this MCP's direct readers do not yet implement the public HTTP API.

The partition order is project/freq_mode/inv_mode/product/year/month. Supply the parent partitions when narrowing a date: a missing parent stops prefix construction. A preview is not a complete temporal or spatial sample. A small returned row count can still require downloading a whole Parquet object. Start with specific files; there is no download-byte cap. S3 requests and data transfer may incur charges even though MCP computation runs locally.

Do not infer product validity from a filename, null quality flag or successful read. Consult the field guide and the product-specific validation sources before analysis. Do not treat Odin limb profiles as greenhouse-gas columns or emission estimates.

Configuration

Set optional environment variables on the client's MCP server entry:

Variable

Default

ODIN_AWS_PROFILE

odin

ODIN_BUCKET

odin-level2

ODIN_MAX_FILES_PER_READ

5

ODIN_MAX_ROWS_PER_READ

1000 (per file)

ODIN_MAX_COLUMNS_PER_READ

20 (explicit column requests)

ODIN_DEFAULT_PREVIEW_ROWS

100

ODIN_MAX_LIST_RESULTS

1000 (file-list request limit)

These settings bound selected outputs, not total bytes downloaded or all partition listing work. There is no hosted team-login flow, remote job execution or autonomous reviewer in this version.

Development and releases

uv sync --locked --no-dev --group test
uv run --no-sync python -m pytest tests -q

Tests use synthetic fixtures or mocked archive operations, and verify guidance without network access. CI covers supported Python versions and checks built packages. See the maintainer guide and release procedures for the build, secret scan, artifact checks and tagged GitHub release workflow.

For manual tool inspection, run npx @modelcontextprotocol/inspector and connect using stdio with the same executable and no arguments. Guidance inspection needs no AWS credentials; the optional data test cases require explicitly authorized archive access.

License and scientific sources

The software and original documentation are MIT licensed. Referenced papers and Odin data retain their own licenses and citation requirements. The repository contains brief original research guidance and source links, not copies of the articles or observational datasets.

Available Tools

7 tools
get_research_topic_toolB
Read-only

Read a documented plot/method topic and citations; does not analyse data.

Inputs: topic_id (required). Returns: object

list_parquet_files_toolB
Read-only

List published HTTPS Parquet URLs and provenance with snapshot-bound pagination.

All filters apply, including when earlier partition levels are omitted. Follow next_token with identical filters; errors are not partial coverage.

Inputs: year, limit, month, product, +4 more. Returns: object

list_partition_values_toolB
Read-only

Discover published L2 partition values over anonymous HTTPS.

Apply all provided filters. Year/month are storage labels, not row-time filters. A budget error never represents a complete empty selection.

Inputs: level (required), year, month, product, +3 more. Returns: object

list_research_topics_toolA
Read-only

List offline Odin research guidance, topic URIs and supporting sources.

Inputs: no named parameters. Returns: object

read_parquet_columns_toolA
Read-only

Read selected physical columns, preserving nulls, nanoseconds and kernels.

Supply an exact catalog-listed file_url, or storage partition filters. Row/column limits do not reduce full-file HTTPS transfer. Nested arrays are subject to the output budget; no automatic scientific filtering is applied.

Inputs: columns (required), rows, year, month, +7 more. Returns: object

read_parquet_preview_toolB
Read-only

Read actual Parquet schema and bounded rows over anonymous HTTPS.

Supply an exact catalog-listed file_url, or storage partition filters. Whole files are transferred within byte budgets. No quality screening or time filtering occurs. Legacy s3_uri returns migration guidance.

Inputs: rows, year, month, s3_uri, +6 more. Returns: object

search_research_guidance_toolB
Read-only

Search local literature guidance and aliases; return up to 8 cited snippets.

No AWS credentials, web request or numerical analysis is needed.

Inputs: query (required), limit. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 7 tools

    Disambiguation4/5

    The two read tools (read_parquet_columns_tool vs read_parquet_preview_tool) overlap somewhat, but descriptions clearly separate column projection from schema/bounded-row preview. The two listing tools operate at different levels (partition values vs file URLs), and the research trio (list/get/search) is cleanly differentiated. Boundaries are mostly clear, with only the paired read tools requiring a careful description read.

    Naming Consistency5/5

    Every tool follows the same verb_noun_tool snake_case pattern (read_parquet_columns_tool, list_parquet_files_tool, get_research_topic_tool, search_research_guidance_tool). The uniform '_tool' suffix further reinforces predictability. No mixing of conventions.

    Tool Count5/5

    Seven tools is well-scoped for a read-only catalog/guidance server, with no obvious redundancy. Each tool occupies a distinct slot: discovery, listing, reading, and guidance lookup.

    Completeness4/5

    Discovery (partitions, files), column reads, previews, and research guidance are all covered, which is solid for a read-only data-catalog purpose. Minor gaps exist — no dedicated schema/metadata-only tool and no meaningful server-side row filtering or aggregation, forcing agents to transfer whole files.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables local research workflows (paper discovery, relevance scoring, digests) and homelab monitoring (Prometheus, logs) through an MCP server, using local LLM inference via Ollama with no cloud dependencies.
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to discover and inspect research datasets via a read-only MCP server, offering search, variable listing, and metadata retrieval without reading data files.
      -