Skip to main content

Development MCP server for LangGraph checkpoint and store inspection

Project description

LangMCP

PyPI version Python versions CI Publish License: MIT

Read-only MCP server for inspecting LangGraph checkpoints, thread state, and long-term memory.

LangMCP helps you answer the debugging question that traces do not always answer:

What is actually saved in my LangGraph persistence layer right now?

It is not a generic SQL MCP. It uses LangGraph-native checkpointer and store APIs, connects through named profiles, and keeps database credentials out of tool arguments.

Why LangMCP

When a stateful agent behaves strangely, the problem is often not only the prompt. It might be the checkpoint it resumed from, the user ID in configurable state, the store namespace used for memory, or an oversized message history.

LangMCP gives MCP clients such as Cursor and Claude Desktop a safe inspection surface for those questions.

LangMCP Not LangMCP
Read-only inspection of LangGraph persistence Arbitrary SQL execution
Profile-based connections Raw DSNs in model-facing arguments
Tools, resources, and prompts for debugging state A replacement for LangSmith or LangGraph Studio
Local stdio MCP server for development LangGraph Agent Server API

Use LangSmith for traces, LangGraph Studio for visual graph workflows, and LangMCP when you want an assistant in your editor to inspect persisted state through a narrow read-only interface.

Features

  • Profile-based config with environment variable expansion.
  • Read-only enforcement in v0.1.
  • Secret redaction in health checks and error output.
  • PostgreSQL, SQLite, and Redis checkpointer inspection.
  • PostgreSQL PostgresStore long-term memory inspection.
  • MCP tools for threads, checkpoints, store data, and analysis.
  • MCP resources for stable readable state URIs.
  • MCP prompts for repeatable debugging workflows.
  • Pagination and truncation for large responses.

Installation

uv pip install "langmcp[all]"

Or run without installing:

uvx "langmcp[all]" --version

LangMCP supports Python 3.11 and 3.12. The repository includes a .python-version file set to Python 3.12.

Configuration

Copy the example config and environment files:

cp examples/langmcp.example.toml langmcp.toml
cp .env.example .env

Set a read-only database URI in .env:

POSTGRES_URI=postgresql://READONLY_USER:READONLY_PASSWORD@HOST:5432/DB_NAME
LANGMCP_READ_ONLY=true

LangMCP loads .env automatically when present. Existing shell environment variables take precedence.

Example langmcp.toml:

[defaults]
profile = "dev"
read_only = true
max_response_chars = 250000

[profiles.dev]
checkpointer = "${POSTGRES_URI}"
store = "${POSTGRES_URI}"

[profiles.local_sqlite]
checkpointer = "sqlite:///./.langgraph/checkpoints.db"

[profiles.local_redis]
checkpointer = "redis://localhost:6379/0"

Environment overrides:

  • LANGMCP_CONFIG
  • LANGMCP_PROFILE
  • LANGMCP_READ_ONLY
  • POSTGRES_URI
  • LANGMCP_CHECKPOINTER_URI
  • LANGMCP_STORE_URI

Verify Setup

Run:

langmcp doctor --config ./langmcp.toml

The doctor command checks connectivity, backend types, setup status, package versions, and redacts sensitive URI fields.

Cursor Setup

See examples/cursor-mcp.json.

Minimal shape:

{
  "mcpServers": {
    "langmcp": {
      "command": "uvx",
      "args": ["langmcp[all]", "serve", "--config", "ABSOLUTE_PATH_TO_LANGMCP_TOML"],
      "env": {
        "LANGMCP_READ_ONLY": "true",
        "POSTGRES_URI": "postgresql://READONLY_USER:READONLY_PASSWORD@HOST:5432/DB_NAME"
      }
    }
  }
}

Start the server directly:

langmcp serve --config ./langmcp.toml

Example Assistant Prompts

Once connected through MCP, ask your assistant:

Use LangMCP to summarize thread THREAD_ID and check whether user memory exists for USER_ID.
Compare checkpoint CHECKPOINT_A and CHECKPOINT_B for thread THREAD_ID. Tell me what changed.
Analyze whether thread THREAD_ID is carrying too much context.
Investigate a possible memory gap for thread THREAD_ID and user USER_ID.

MCP Tools

All tools accept optional profile unless noted. Responses include profile, truncated, and pagination fields where applicable.

Tool Description
health_check Connectivity, backend types, redacted URIs
list_profiles Profile names and backend types
list_threads Discover thread IDs
get_thread_state Latest or specific checkpoint state
list_checkpoint_history Paginated checkpoint list
get_checkpoint Full snapshot for one checkpoint
compare_checkpoints Diff values and message count delta
summarize_thread Transcript-style summary
analyze_context_window Token estimate and size warnings
analyze_memory_gaps Store versus thread user ID hints
list_namespaces Store namespace tuples
search_store Search under namespace prefix
get_store_item Full store value by key
summarize_user_memory Grouped keys under user prefix

MCP Resources

Resources expose readable state through stable MCP URIs.

Resource URI Description
langmcp://profiles Configured profiles and active profile
langmcp://profiles/{profile}/health Connectivity and setup status
langmcp://profiles/{profile}/threads Discovered thread IDs
langmcp://profiles/{profile}/threads/{thread_id}/state Latest thread state
langmcp://profiles/{profile}/threads/{thread_id}/summary Transcript-style thread summary
langmcp://profiles/{profile}/threads/{thread_id}/checkpoints Recent checkpoint history
langmcp://profiles/{profile}/threads/{thread_id}/checkpoints/{checkpoint_id} Full checkpoint snapshot
langmcp://profiles/{profile}/threads/{thread_id}/context-analysis Context-window analysis
langmcp://profiles/{profile}/store/namespaces Long-term memory namespaces
langmcp://profiles/{profile}/store/items/{namespace}/{key} One store item
langmcp://profiles/{profile}/users/{user_id}/memory-summary User memory summary

For multi-part namespaces, prefer the get_store_item tool if your MCP client treats / as a path separator inside resource parameters.

MCP Prompts

Prompts package repeatable investigations.

Prompt Description
debug_thread Diagnose one thread from summary, checkpoints, context analysis, and memory hints
investigate_memory_gap Check whether thread state and long-term memory are aligned
compare_thread_checkpoints Explain behavioral differences between two checkpoints
inspect_user_memory Summarize and sanity-check long-term memory for one user

Backend Matrix

Backend Checkpointer Store in v0.1
PostgreSQL Full Full through PostgresStore
SQLite Full Not supported
Redis Full Not supported

Security

  1. Tools accept profile names, not raw DSNs.
  2. read_only=true is enforced in v0.1.
  3. Use a read-only PostgreSQL user for shared environments.
  4. Passwords are redacted in health_check and CLI output.
  5. Redis thread discovery uses SCAN with limits. Avoid broad scans on very large instances.
  6. Commit examples/langmcp.example.toml and .env.example, not real langmcp.toml or .env files.

Development

uv pip install -e ".[all,dev]"
ruff check .
pytest tests/unit -v

Integration tests use local Docker services:

docker compose -f docker-compose.test.yml up -d
POSTGRES_URI=postgresql://langgraph:langgraph@localhost:5442/langgraph \
  REDIS_URI=redis://localhost:6379/0 \
  pytest tests/integration -v -m integration

Use the local test values from docker-compose.test.yml. They are for Docker integration tests only.

Roadmap

  • LangGraph Agent Server adapter.
  • HTTP transport with team auth.
  • Vector store inspection tools.
  • Carefully scoped write workflows such as update_thread_state and resume_thread.

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md.

Good first issue ideas:

  • Add examples for a specific LangGraph persistence backend.
  • Improve error messages for unsupported store backends.
  • Add a resource or prompt test for an edge case.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langmcp-0.1.1.tar.gz (30.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langmcp-0.1.1-py3-none-any.whl (32.1 kB view details)

Uploaded Python 3

File details

Details for the file langmcp-0.1.1.tar.gz.

File metadata

  • Download URL: langmcp-0.1.1.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for langmcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 99bf34b6f6c1d8b8dc4f13ea3edf054fe58fa3cbe3f2f063d65a96a6746b4f8c
MD5 60ebae1b1d8db9f1608f38051f0048a8
BLAKE2b-256 e334a8e75778af30e9f58c1097de959383e80d92e3f4813014ef61e6941e8392

See more details on using hashes here.

Provenance

The following attestation bundles were made for langmcp-0.1.1.tar.gz:

Publisher: publish.yml on xmassmx/langmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file langmcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: langmcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 32.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for langmcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a94fc288153922eaf3e8f289ffa8a078314fc0255b5459724ed653a7094aba5f
MD5 1e72edf4d9e5801ea0d206a81133e9a4
BLAKE2b-256 c1353480e0f12685444539a3bd6ceeb2c81e998235c4ee83cf7b739956eae7de

See more details on using hashes here.

Provenance

The following attestation bundles were made for langmcp-0.1.1-py3-none-any.whl:

Publisher: publish.yml on xmassmx/langmcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page