mcpField
L
Letta MCP Server

Letta MCP Server

Local
github.com/oculairmediaAI & Agents79Updated 16w ago

About Letta MCP Server

Letta MCP Server is an MCP server written in Rust with the TurboMCP framework, for managing a Letta instance and communicating with its agents. It targets developers who want MCP access to Letta, and it consolidates 103 operations into 7 tools while trimming response sizes.

Key features

  1. 017 consolidated tools covering 103 operations
  2. 02Supports stdio and HTTP transports
  3. 03Pagination and summary mode reduce response size
  4. 04Type-narrowed parameter schemas with descriptions
  5. 05Compatible with Letta 0.16.x and MCP 2025-11-25

Use cases

  1. 01Managing Letta agent lifecycle and messaging from an MCP client
  2. 02Viewing and updating agent core memory, blocks and archives
  3. 03Administering Letta tools, data sources and MCP server configurations

MCP support

This project is an MCP server that exposes Letta agents, memory, tools, sources and jobs to MCP clients. Clients such as Claude Desktop and Cursor connect over stdio or HTTP.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"Letta-MCP-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"pull"
]
}
}
}
Run commanddocker run -i --rm pull

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
ocipull

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Letta MCP Server

npm version Rust Tests Coverage Docker Build License: MIT

A high-performance Model Context Protocol (MCP) server for Letta AI, built with Rust and the TurboMCP framework.

Features

  • 7 Consolidated Tools covering 103 operations using the discriminator pattern
  • High Performance -- Rust, ~10-30MB memory, <500ms startup, parallel fan-out via tokio::join! and buffer_unordered
  • Dual Transport -- stdio (Claude Desktop, Cursor, etc.) and HTTP (production deployments)
  • Response Size Optimization -- 68-96% reduction in response sizes for LLM context efficiency
  • Type-Narrowed Schemas -- specific object/array types with per-parameter descriptions (no generic Value params)
  • Multi-Platform -- macOS, Linux, Windows (x64 and arm64)
  • Letta 0.16.x Compatible -- archives, conversations, MCP servers v2
  • MCP 2025-11-25 Compliant -- streamable HTTP transport with SSE
  • Compile-Time Routing -- zero runtime overhead for tool dispatch via TurboMCP v3 macros

Quick Start

npm (Recommended)
npm install -g letta-mcp-server

The correct binary for your platform is installed automatically.

PlatformPackage
macOS Intelletta-mcp-darwin-x64
macOS Apple Siliconletta-mcp-darwin-arm64
Linux x64letta-mcp-linux-x64
Linux arm64letta-mcp-linux-arm64
Windows x64letta-mcp-windows-x64
Docker
docker pull ghcr.io/oculairmedia/letta-mcp-server-rust:rust-latest

docker run -d \
  -p 6507:6507 \
  -e LETTA_BASE_URL=http://your-letta-instance:8283 \
  -e LETTA_PASSWORD=your-password \
  -e TRANSPORT=http \
  --name letta-mcp \
  ghcr.io/oculairmedia/letta-mcp-server-rust:rust-latest
Docker Compose
services:
  letta-mcp:
    image: ghcr.io/oculairmedia/letta-mcp-server-rust:rust-latest
    container_name: letta-mcp
    restart: unless-stopped
    ports:
      - '6507:6507'
    environment:
      LETTA_BASE_URL: ${LETTA_BASE_URL}
      LETTA_PASSWORD: ${LETTA_PASSWORD}
      TRANSPORT: http
      PORT: 6507
      RUST_LOG: info
    env_file:
      - .env
    healthcheck:
      test: ['CMD-SHELL', "timeout 1 bash -c '</dev/tcp/localhost/6507' || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

Environment Variables

VariableRequiredDefaultDescription
LETTA_BASE_URLYes—Letta API URL (e.g. http://localhost:8283)
LETTA_PASSWORDYes—Letta API password
TRANSPORTNostdioTransport mode: stdio or http
PORTNo6507HTTP port (when TRANSPORT=http)
RUST_LOGNoinfoLog level: debug, info, warn, error
RUST_BACKTRACENo0Enable backtraces (0 or 1)
LETTA_MCP_MAX_VALUE_LENNo500Max characters for block/passages/search values
LETTA_MCP_CORE_MEMORY_PREVIEW_LENNo200Max characters for core memory previews

Available Tools

The server provides 7 consolidated tools with 103 operations:

ToolOperationsDescription
letta_agent_advanced28Agent lifecycle, messaging, conversations, context, export/import
letta_memory_unified24Core memory, blocks, archival passages, archives, search
letta_tool_manager13Tool CRUD, attach/detach, bulk operations
letta_source_manager15Data sources, files, passages, attachments
letta_job_monitor4Job tracking, cancellation, active monitoring
letta_file_folder_ops8File sessions, folder management
letta_mcp_ops11MCP server lifecycle, tool discovery, v2 API support
Tool Operations
letta_agent_advanced (28 operations)
list, create, get, update, delete, search, list_tools, send_message,
export, import, clone, get_config, bulk_delete, context, reset_messages,
summarize, stream, async_message, cancel_message, preview_payload,
search_messages, get_message, count, list_conversations,
get_conversation, send_conversation_message, cancel_conversation,
compact_conversation
letta_memory_unified (24 operations)
get_core_memory, update_core_memory, get_block_by_label, list_blocks,
create_block, get_block, update_block, attach_block, detach_block,
list_agents_using_block, search_archival, list_passages, create_passage,
update_passage, delete_passage, search_memory, list_archives,
get_archive, create_archive, update_archive, delete_archive,
attach_archive, detach_archive, list_agents_using_archive
letta_tool_manager (13 operations)
list, get, create, update, delete, upsert, attach, detach, bulk_attach,
generate_from_prompt, generate_schema, run_from_source, add_base_tools
letta_source_manager (15 operations)
list, get, create, update, delete, count, attach, detach, list_attached,
upload, delete_files, list_files, list_folders, get_folder_contents,
list_agents_using
letta_job_monitor (4 operations)
list, get, cancel, list_active
letta_file_folder_ops (8 operations)
list_files, open_file, close_file, close_all_files, list_folders,
attach_folder, detach_folder, list_agents_in_folder
letta_mcp_ops (11 operations)
add, update, delete, test, connect, resync, list_servers, list_tools,
register_tool, execute, attach_mcp_server

Response Size Optimizations

The Rust implementation includes significant response size optimizations for LLM context efficiency:

OperationOptimizationSize Reduction
Agent ListDefault pagination (15 items), summary mode68-85%
Tool ListDefault pagination (25 items), truncated descriptions70-90%
Memory BlocksExcludes heavy fields in list mode60-80%
Source ListSummary mode, pagination75-95%
Pagination

All list operations support pagination:

{
  "operation": "list",
  "pagination": {
    "limit": 25,
    "offset": 0
  }
}
Summary vs Full Mode

List operations return summary data by default. Use get operation with specific ID for full details:

// Summary (default for list)
{
  "id": "agent-123",
  "name": "My Agent",
  "model": "gpt-4",
  "tool_count": 5
}

// Full (with get operation)
{
  "id": "agent-123",
  "name": "My Agent",
  "model": "gpt-4",
  "system_prompt": "...",
  "tools": [...],
  "memory_blocks": [...]
}

MCP Client Configuration

Claude Desktop
{
  "mcpServers": {
    "letta": {
      "command": "letta-mcp",
      "env": {
        "LETTA_BASE_URL": "http://localhost:8283",
        "LETTA_PASSWORD": "your-password"
      }
    }
  }
}
Cursor / Windsurf
{
  "mcpServers": {
    "letta": {
      "command": "letta-mcp",
      "env": {
        "LETTA_BASE_URL": "http://localhost:8283",
        "LETTA_PASSWORD": "your-password"
      }
    }
  }
}
OpenCode (HTTP)
{
  "mcp": {
    "letta-mcp": {
      "type": "remote",
      "url": "http://localhost:6507/mcp",
      "enabled": true
    }
  }
}

Building from Source

Prerequisites
  • Rust nightly (edition 2024 support) - install via rustup
  • Docker (optional, for containerized builds)
Local Build
git clone https://github.com/oculairmedia/Letta-MCP-server.git
cd Letta-MCP-server

cargo build --release

LETTA_BASE_URL=http://your-letta:8283 \
LETTA_PASSWORD=your-password \
./target/release/letta-server

For local development, the Rust binary also loads a repo-level .env automatically, so cargo run -p letta-server works without manually exporting variables first.

Docker Build
docker build -f Dockerfile.rust -t letta-mcp .

docker run -d \
  -p 6507:6507 \
  -e LETTA_BASE_URL=http://your-letta:8283 \
  -e LETTA_PASSWORD=your-password \
  -e TRANSPORT=http \
  letta-mcp

Architecture

letta-server/
├── src/
│   ├── main.rs                        # Entry point, transport selection
│   ├── lib.rs                         # Server init, compile-time tool registration
│   └── tools/
│       ├── mod.rs                     # Tool module exports
│       ├── response_utils.rs          # Unified ToolResponse, pagination helpers
│       ├── validation_utils.rs        # require_field, require_id, sdk_err
│       ├── id_utils.rs               # ID parsing utilities
│       ├── agent_advanced/            # Agent operations (28 ops)
│       │   ├── crud.rs               #   list, create, get, update, delete, search
│       │   ├── messaging.rs           #   send_message, stream, async, preview
│       │   ├── conversations.rs       #   list, get, send, cancel, compact
│       │   └── management.rs          #   export, import, clone, config, bulk_delete
│       ├── memory_unified/            # Memory operations (24 ops)
│       │   ├── core.rs               #   get/update core memory
│       │   ├── blocks.rs             #   block CRUD, attach/detach
│       │   ├── passages.rs           #   archival passage CRUD
│       │   ├── archives.rs           #   archive CRUD, attach/detach
│       │   └── search.rs             #   search_archival, search_memory
│       ├── tool_manager.rs            # Tool operations (13 ops)
│       ├── source_manager.rs          # Source operations (15 ops)
│       ├── job_monitor.rs             # Job operations (4 ops)
│       ├── file_folder_ops.rs         # File/folder operations (8 ops)
│       └── mcp_ops.rs                # MCP server v2 operations (11 ops)
├── tests/                             # Integration tests
└── Cargo.toml
Key Dependencies
  • TurboMCP v3 -- MCP framework with compile-time routing and streamable HTTP
  • letta-rs -- Vendored Rust Letta API client (0.16.x)
  • Tokio -- Async runtime
  • Futures -- Stream combinators (buffer_unordered for parallel fan-out)
  • Serde -- Serialization/deserialization

Troubleshooting

Connection Refused
  1. Ensure the server is running: docker ps | grep letta-mcp
  2. Check logs: docker logs letta-mcp
  3. Verify port is accessible: curl http://localhost:6507/mcp
Authentication Errors
  1. Verify LETTA_BASE_URL points to your Letta instance
  2. Check LETTA_PASSWORD or LETTA_API_TOKEN is correct
  3. Ensure Letta server is accessible from the container
Tool Not Found
  1. List available tools via MCP: tools/list
  2. Verify you're using correct operation names (e.g., list not list_agents)
Logs
# View server logs
docker logs -f letta-mcp

# Enable debug logging
RUST_LOG=debug letta-mcp

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Make changes and add tests
  4. Run tests: cargo test
  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Related Projects

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.