An open API service indexing awesome lists of open source software.

https://github.com/kiliman/codemesh

The Self-Improving MCP Server - Agents write code to orchestrate multiple MCP servers with intelligent TypeScript execution and auto-augmentation
https://github.com/kiliman/codemesh

agent ai codemesh llm mcp model-context-protocol multi-server orchestration tools typescript

Last synced: 25 days ago
JSON representation

The Self-Improving MCP Server - Agents write code to orchestrate multiple MCP servers with intelligent TypeScript execution and auto-augmentation

Awesome Lists containing this project

README

          


CodeMesh Logo

CodeMesh


Agents Write Code. Orchestrate Everything.


npm version
License
Documentation

The world's first self-improving MCP server


## ๐Ÿ“บ See It In Action

[![CodeMesh Demo](https://img.youtube.com/vi/kb6JkeiQXAM/maxresdefault.jpg)](https://www.youtube.com/watch?v=kb6JkeiQXAM)

**Watch:** How Agent A explores and documents, then Agent B one-shots the same task - **2.6x faster!**

๐Ÿ“– **Read the story:** [Building CodeMesh - From Idea to Self-Improving Intelligence](https://www.codemeshmcp.com/blog/building-codemesh)

## What is CodeMesh?

CodeMesh lets AI agents write **TypeScript code** to orchestrate **ANY MCP server**. One prompt. One code block. Multiple servers working together.

Instead of exposing dozens of individual tools, CodeMesh provides just **3 tools**:

1. **`discover-tools`** - See what's available (context-efficient overview)
2. **`get-tool-apis`** - Get TypeScript APIs for specific tools
3. **`execute-code`** - Execute TypeScript that calls multiple tools

### ๐ŸŽ‰ The Innovation: Auto-Augmentation

When agents encounter unclear tool outputs, CodeMesh **forces documentation before proceeding**. This creates compound intelligence - each exploration helps ALL future agents.

**Proven:** Agent A explored and documented. Agent B one-shot the same task. **2.6x faster!** ๐Ÿš€

## Installation

### 1. Add CodeMesh to Claude Desktop

```bash
claude mcp add codemesh npx -y codemesh
```

Or manually add to your Claude Desktop MCP settings:

```json
{
"mcpServers": {
"codemesh": {
"command": "npx",
"args": ["-y", "codemesh"]
}
}
}
```

### 2. Create Configuration

Create a `.codemesh/config.json` file in your project directory to configure which MCP servers CodeMesh should connect to:

```json
{
"logging": {
"enabled": true,
"level": "info",
"logDir": ".codemesh/logs"
},
"servers": [
{
"id": "filesystem",
"name": "File System",
"type": "stdio",
"command": ["npx", "@modelcontextprotocol/server-filesystem", "/path/to/directory"],
"timeout": 30000
},
{
"id": "brave-search",
"name": "Brave Search",
"type": "stdio",
"command": ["npx", "-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "${BRAVE_API_KEY}"
}
},
{
"id": "weather",
"name": "Weather Server",
"type": "http",
"url": "http://localhost:3000/mcp"
}
]
}
```

#### Server Configuration Options

Each server entry supports:

- **`id`** (required) - Unique identifier for the server
- **`name`** (required) - Human-readable name
- **`type`** (required) - Server type: `"stdio"`, `"http"`, or `"websocket"`
- **`command`** (stdio only) - Command array to start the server
- **`cwd`** (stdio only) - Working directory for the command
- **`url`** (http/websocket only) - Server URL
- **`env`** (optional) - Environment variables for the server
- **`timeout`** (optional) - Connection timeout in milliseconds

#### Environment Variable Substitution

Use `${VAR}` or `${VAR:-default}` syntax in your config for secure credential management:

```json
{
"env": {
"API_KEY": "${MY_API_KEY}",
"ENDPOINT": "${API_ENDPOINT:-https://default.api.com}"
}
}
```

This works with any environment variable manager (Doppler, 1Password, etc.) and keeps your config safe to commit.

#### Logging Configuration

Enable markdown-based file logging to track tool calls, code execution, and responses:

```json
{
"logging": {
"enabled": true,
"level": "info",
"logDir": ".codemesh/logs"
}
}
```

**Options:**

- **`enabled`** (boolean) - Enable/disable file logging
- **`level`** ("debug" | "info" | "warn" | "error") - Minimum log level to record
- **`logDir`** (string) - Directory for log files (defaults to `.codemesh/logs`)

**Log Format:**

Logs are saved as markdown files (`.codemesh/logs/YYYY-MM-DD.md`) with syntax highlighting:

```markdown
## 14:52:45 - execute-code

**Duration:** 2.1s
**Status:** โœ… Success

### Request

` ``typescript
const alerts = await weatherServer.getAlerts({ state: 'CA' })
return alerts ` ``

### Console Output

` ``
Found 3 alerts ` ``

### Response

` ``json
{ "count": 3, "alerts": [...] } ` ``
```

Perfect for debugging, demo preparation, and understanding what CodeMesh is doing! ๐ŸŽฏ

## How It Works

CodeMesh uses an **intelligent three-step workflow** that happens automatically when you give it a prompt:

### Example: Real-World Usage

You ask Claude:

> _"Use CodeMesh to give me the top 3 weather alerts for Moyock, NC"_

**Behind the scenes, CodeMesh automatically:**

1. **Discovers Tools** (`discover-tools`)
- Sees `geocode` tool (to convert "Moyock, NC" to coordinates)
- Sees `getAlerts` tool from weather server
- Context-efficient: only shows tool names and descriptions

2. **Loads APIs** (`get-tool-apis`)
- Requests TypeScript function signatures for `geocode` and `getAlerts`
- Generates type-safe APIs: `geocodeServer.geocode({ location })` and `weatherServer.getAlerts({ state })`
- Includes any existing augmentation documentation from previous runs

3. **Writes & Executes Code** (`execute-code`)
- CodeMesh writes TypeScript code that:
- Calls `geocodeServer.geocode` to get coordinates
- Calls `weatherServer.getAlerts` with the state
- Parses results and filters to top 3 by severity
- Executes in secure VM2 sandbox (30s timeout)
- Returns formatted results

### Self-Improving Intelligence (Auto-Augmentation)

**The Problem**: Most MCP servers don't document their output formats. Is it JSON? Plain text? Key-value pairs? Arrays?

**CodeMesh's Solution**: When the agent struggles to parse output, it automatically:

1. **Enters EXPLORATION Mode**
- Adds `// EXPLORING` comment to the code
- Calls the tool to examine actual output structure
- Figures out: Is it JSON? What fields exist? What's the structure?

2. **Gets Blocked by Design**
- CodeMesh returns an ERROR (not success) for exploration mode
- Forces the agent to document before proceeding
- "You cannot parse until you create augmentation!"

3. **Creates Augmentation** (`add-augmentation`)
- Agent writes markdown documentation with:
- Output format description
- Field definitions
- Example output (actual data from exploration)
- **Working parsing code** (TypeScript examples)
- Saves to `.codemesh/[server-id].md`

4. **Enhanced for Next Time**
- Next `get-tool-apis` call includes augmentation in JSDoc
- Future agents see the parsing examples and data structure
- **One-shot success** - no trial-and-error needed!

**Result**: Agent A struggles and documents. Agent B one-shots it. Agent C one-shots it. **Compound intelligence!**

## Example: What CodeMesh Writes For You

**Your prompt:**

> _"Find the 3 most severe weather alerts in North Carolina"_

**CodeMesh automatically writes:**

```typescript
// Step 1: Fetch weather alerts
const alerts = await weatherServer.getAlerts({ state: 'NC' })
const alertsData = JSON.parse(alerts.content[0].text)

// Step 2: Define severity hierarchy
const severityHierarchy = ['Extreme', 'Severe', 'Moderate', 'Minor']
const highestSeverity = severityHierarchy.find((severity) =>
alertsData.features.some((alert) => alert.properties.severity === severity),
)

// Step 3: Filter and return top 3
const topAlerts = alertsData.features.filter((alert) => alert.properties.severity === highestSeverity).slice(0, 3)

return {
count: topAlerts.length,
severity: highestSeverity,
alerts: topAlerts,
}
```

**You get intelligent results** - no manual tool calls, no trial-and-error, just results!

## Why CodeMesh?

### โŒ The Problem

- **Traditional MCP:** Expose 50+ tools, flood agent context
- Agents can't coordinate tools from different servers
- Trial-and-error on unclear tool outputs wastes tokens
- Every agent repeats the same mistakes

### โœจ The CodeMesh Way

- **Just 3 tools:** discover, get APIs, execute code
- Agents write TypeScript calling multiple servers at once
- Auto-augmentation forces documentation of outputs
- **Knowledge compounds:** Agent A helps Agent B

### ๐Ÿ† Key Features

- ๐Ÿง  **Self-Improving** - Agents document unclear outputs, future agents benefit
- ๐Ÿ”— **Multi-Server Orchestration** - Coordinate tools from different MCP servers in single code block (HTTP + stdio + websocket)
- ๐ŸŽฏ **Context Efficient** - Load only the tools you need, 3 tools vs 50+
- ๐Ÿš€ **Zero Configuration** - Point to your MCP servers and go, works with ANY compliant MCP server
- โšก **Production Ready** - Type-safe TypeScript execution in VM2 sandbox, authentication, error handling
- ๐Ÿ”’ **Secure by Default** - Environment variable substitution, principle of least privilege

## Best Practices

### Use Subagents for Maximum Context Efficiency

While CodeMesh is context-efficient internally (tiered discovery prevents tool pollution), **we strongly recommend spawning a subagent** to execute CodeMesh operations. This keeps your main agent's context clean while CodeMesh does the heavy lifting.

**Example with Claude Code:**

```
User: "Analyze the weather data and file structure for my project"
Main Agent: Let me spawn a subagent to handle this task...
```

Main agent uses the Task tool to spawn a codemesh subagent with the prompt: "Use CodeMesh to analyze weather alerts for NC and correlate with local file timestamps"

**Benefits:**

- ๐Ÿงน Main context stays clean
- โšก Subagent can iterate on CodeMesh without polluting parent
- ๐ŸŽฏ Specialized subagent focused solely on orchestration
- ๐Ÿ“ฆ Results summarized back to main agent when complete

**When NOT to use subagents:**

- Simple single-tool calls (just use the tool directly)
- When you need tight integration with main conversation flow

See [`examples/codemesh-agent.md`](./examples/codemesh-agent.md) for a ready-to-use Claude Code agent configuration.

## Contributing

Want to contribute to CodeMesh development? See [CONTRIBUTING.md](./CONTRIBUTING.md) for developer setup, architecture details, and development workflows.

---

![Built with Sonnet 4.5](./assets/built-with-sonnet-4_5.jpg)

**From Claudia, with Love โค๏ธ**

_Built with [Claude Code](https://claude.com/claude-code) using Sonnet 4.5 for the [Anthropic MCP Hackathon](https://x.com/alexalbert__/status/1973071320025014306)_

**[๐ŸŒ Website](https://www.codemeshmcp.com)** โ€ข **[๐Ÿ“– Blog](https://www.codemeshmcp.com/blog/building-codemesh)** โ€ข **[๐Ÿ“ฆ NPM](https://www.npmjs.com/package/codemesh)** โ€ข **[๐Ÿ“บ Demo Video](https://www.youtube.com/watch?v=kb6JkeiQXAM)**