emceepee 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Anthropic
3
+ Copyright (c) 2026 Andrew Jefferson
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,121 +1,202 @@
1
1
  # emceepee
2
2
 
3
- An MCP (Model Context Protocol) proxy server that provides a static tool interface for dynamically managing and interacting with multiple backend MCP servers.
3
+ **Connect to any MCP server, anytime. Access the full MCP protocol through tools.**
4
4
 
5
- ## Problem
5
+ [![npm version](https://img.shields.io/npm/v/emceepee.svg)](https://www.npmjs.com/package/emceepee)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
7
 
7
- Claude's tool schema is injected at conversation start and doesn't update mid-conversation, even when MCP servers send `notifications/tools/list_changed`. This prevents Claude from discovering dynamically-added tools.
8
+ ```bash
9
+ npx emceepee
10
+ ```
11
+
12
+ ## Why?
13
+
14
+ **Problem 1: Static connections.** Most MCP clients only connect to servers at startup. Want to connect to a new server mid-session? Restart everything.
15
+
16
+ **Problem 2: Incomplete protocol support.** MCP has rich features—resources, prompts, notifications, sampling, elicitations—but many clients only implement tools. Those features? Inaccessible.
17
+
18
+ **emceepee solves both.** It's a proxy that exposes the entire MCP protocol as tools. Any client that supports tool calling can now:
19
+
20
+ - Connect to new MCP servers dynamically
21
+ - Access resources and resource templates
22
+ - Use prompts
23
+ - Receive notifications and logs
24
+ - Handle sampling requests (bidirectional LLM calls)
25
+ - Handle elicitations (user input requests)
26
+
27
+ ## Quick Start
28
+
29
+ ### 1. Add to your MCP client
30
+
31
+ **Claude Code / Claude Desktop** (`.mcp.json`):
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "emceepee": {
36
+ "command": "npx",
37
+ "args": ["emceepee"]
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ **Other clients** — point to the HTTP server:
44
+ ```bash
45
+ npx emceepee-http # runs on http://localhost:8080/mcp
46
+ ```
47
+
48
+ ### 2. Connect to servers mid-session
49
+
50
+ Ask your LLM:
51
+
52
+ > "Connect to http://localhost:3001/mcp and show me what it can do"
53
+
54
+ The LLM will use emceepee's tools to connect, explore, and interact with the server.
55
+
56
+ ---
57
+
58
+ ## How It Works
59
+
60
+ ```
61
+ ┌────────────┐ ┌───────────┐ ┌──────────────┐
62
+ │ MCP Client │────▶│ emceepee │────▶│ MCP Server 1 │
63
+ │ │ │ │ └──────────────┘
64
+ │ (tools │◀────│ (proxy) │────▶┌──────────────┐
65
+ │ only) │ │ │ │ MCP Server 2 │
66
+ └────────────┘ └───────────┘ └──────────────┘
67
+ ```
68
+
69
+ emceepee exposes a **static set of tools** that never change. These tools provide access to the full MCP protocol, letting any tool-capable client use features it doesn't natively support.
70
+
71
+ ## Tools
72
+
73
+ ### Server Management
74
+ | Tool | Description |
75
+ |------|-------------|
76
+ | `add_server` | Connect to a backend MCP server |
77
+ | `remove_server` | Disconnect from a server |
78
+ | `list_servers` | List connected servers with status |
79
+
80
+ ### Tools
81
+ | Tool | Description |
82
+ |------|-------------|
83
+ | `list_tools` | List tools from connected servers (with regex filtering) |
84
+ | `execute_tool` | Run a tool on a backend server |
8
85
 
9
- ## Solution
86
+ ### Resources
87
+ | Tool | Description |
88
+ |------|-------------|
89
+ | `list_resources` | List available resources |
90
+ | `list_resource_templates` | List resource templates |
91
+ | `read_resource` | Fetch a resource by URI |
92
+
93
+ ### Prompts
94
+ | Tool | Description |
95
+ |------|-------------|
96
+ | `list_prompts` | List available prompts |
97
+ | `get_prompt` | Get a prompt with arguments |
98
+
99
+ ### Notifications & Logs
100
+ | Tool | Description |
101
+ |------|-------------|
102
+ | `get_notifications` | Get buffered server notifications |
103
+ | `get_logs` | Get buffered log messages |
104
+
105
+ ### Sampling (bidirectional LLM requests)
106
+ | Tool | Description |
107
+ |------|-------------|
108
+ | `get_sampling_requests` | Get pending requests from servers wanting LLM completions |
109
+ | `respond_to_sampling` | Send an LLM response back to the server |
10
110
 
11
- emceepee provides a **static set of meta-tools** that allow Claude to:
111
+ ### Elicitations (user input requests)
112
+ | Tool | Description |
113
+ |------|-------------|
114
+ | `get_elicitations` | Get pending requests for user input |
115
+ | `respond_to_elicitation` | Send user input back to the server |
12
116
 
13
- - Dynamically add/remove backend MCP servers at runtime
14
- - Discover tools, resources, and prompts from any connected backend
15
- - Execute tools on backends by name
16
- - Fetch resources and prompts from backends
117
+ ### Tasks & Activity
118
+ | Tool | Description |
119
+ |------|-------------|
120
+ | `list_tasks` | List background tasks |
121
+ | `get_task` | Get task status |
122
+ | `cancel_task` | Cancel a running task |
123
+ | `await_activity` | Wait for server events (polling) |
17
124
 
18
125
  ## Installation
19
126
 
20
127
  ```bash
21
- npm install emceepee
22
- # or
23
- bun add emceepee
128
+ # Run directly
129
+ npx emceepee
130
+
131
+ # Or install globally
132
+ npm install -g emceepee
24
133
  ```
25
134
 
26
135
  ## Usage
27
136
 
28
- ### Starting the Server
137
+ ### stdio transport (Claude Code, Claude Desktop)
29
138
 
30
139
  ```bash
31
- # Default port 8080
32
140
  npx emceepee
141
+ ```
142
+
143
+ ### HTTP transport (web clients, custom integrations)
144
+
145
+ ```bash
146
+ # Default port 8080
147
+ npx emceepee-http
33
148
 
34
149
  # Custom port
35
- PORT=9000 npx emceepee
150
+ PORT=9000 npx emceepee-http
36
151
 
37
- # With initial backend servers
38
- npx emceepee --config ./servers.json
152
+ # With pre-configured servers
153
+ npx emceepee-http --config servers.json
39
154
  ```
40
155
 
41
156
  ### Configuration File
42
157
 
158
+ Pre-configure backend servers:
159
+
43
160
  ```json
44
161
  {
45
162
  "servers": [
46
- { "name": "minecraft", "url": "http://localhost:3001/mcp" },
47
- { "name": "other", "url": "http://localhost:4000/mcp" }
163
+ { "name": "myserver", "url": "http://localhost:3001/mcp" }
48
164
  ]
49
165
  }
50
166
  ```
51
167
 
52
- ## Available Tools
168
+ ## Example Session
53
169
 
54
- | Tool | Description |
55
- |------|-------------|
56
- | `add_server` | Connect to a backend MCP server (name, url) |
57
- | `remove_server` | Disconnect from a backend server |
58
- | `list_servers` | List all connected backend servers with status |
59
- | `list_tools` | List tools from one or all backends |
60
- | `execute_tool` | Call a tool on a specific backend server |
61
- | `list_resources` | List resources from one or all backends |
62
- | `get_resource` | Fetch a specific resource from a backend |
63
- | `list_prompts` | List prompts from one or all backends |
64
- | `get_prompt` | Get a specific prompt from a backend |
65
- | `get_notifications` | Get buffered notifications from backends |
66
-
67
- ## Example
68
-
69
- ```typescript
70
- // 1. Add a backend server
71
- execute_tool("add_server", { name: "minecraft", url: "http://localhost:3001/mcp" })
72
-
73
- // 2. Discover what tools it has
74
- execute_tool("list_tools", { server: "minecraft" })
75
-
76
- // 3. Execute a tool on the backend
77
- execute_tool("execute_tool", {
78
- server: "minecraft",
79
- tool: "screenshot",
80
- args: {}
81
- })
82
170
  ```
171
+ User: Connect to http://localhost:3001/mcp as "gameserver"
83
172
 
84
- ## Architecture
173
+ LLM: [uses add_server]
174
+ Connected to gameserver successfully.
85
175
 
86
- ```
87
- ┌─────────┐ ┌───────────┐ ┌─────────────────┐
88
- │ Claude │────▶│ emceepee │────▶│ Backend MCP │
89
- │ │ │ │ │ Server 1 │
90
- │ │ │ Static │ └─────────────────┘
91
- │ │◀────│ Tools │────▶┌─────────────────┐
92
- │ │ │ │ │ Backend MCP │
93
- └─────────┘ └───────────┘ │ Server 2 │
94
- └─────────────────┘
95
- ```
96
-
97
- ## Development
98
-
99
- ```bash
100
- # Install dependencies
101
- bun install
176
+ User: What can it do?
102
177
 
103
- # Run in development
104
- bun run dev
178
+ LLM: [uses list_tools, list_resources, list_prompts]
179
+ gameserver has:
180
+ - 3 tools: screenshot, send_chat, move
181
+ - 2 resources: player_state, world_info
182
+ - 1 prompt: describe_scene
105
183
 
106
- # Type check
107
- bun run typecheck
184
+ User: Get the player state
108
185
 
109
- # Lint
110
- bun run lint
186
+ LLM: [uses read_resource with uri="minecraft://state"]
187
+ Player is at position (100, 64, -200), health: 18/20
188
+ ```
111
189
 
112
- # Run all checks
113
- bun run check
190
+ ## Development
114
191
 
115
- # Build for production
116
- bun run build
192
+ ```bash
193
+ bun install # Install dependencies
194
+ bun run dev # stdio server (development)
195
+ bun run dev:http # HTTP server (development)
196
+ bun run check # TypeScript + ESLint
197
+ bun run build # Production build
117
198
  ```
118
199
 
119
200
  ## License
120
201
 
121
- MIT
202
+ MIT © Andrew Jefferson