emceepee 0.2.0 → 0.2.2
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 +1 -1
- package/README.md +158 -77
- package/dist/emceepee-http.js +285 -0
- package/dist/emceepee.js +56 -0
- package/package.json +14 -7
- package/dist/mcp-proxy.js +0 -63
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,121 +1,202 @@
|
|
|
1
|
-
#
|
|
1
|
+
# emceepee
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Connect to any MCP server, anytime. Access the full MCP protocol through tools.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/emceepee)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
|
|
7
|
-
|
|
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
|
-
|
|
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 |
|
|
10
92
|
|
|
11
|
-
|
|
93
|
+
### Prompts
|
|
94
|
+
| Tool | Description |
|
|
95
|
+
|------|-------------|
|
|
96
|
+
| `list_prompts` | List available prompts |
|
|
97
|
+
| `get_prompt` | Get a prompt with arguments |
|
|
12
98
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 |
|
|
110
|
+
|
|
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 |
|
|
116
|
+
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
###
|
|
137
|
+
### stdio transport (Claude Code, Claude Desktop)
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npx emceepee
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### HTTP transport (web clients, custom integrations)
|
|
29
144
|
|
|
30
145
|
```bash
|
|
31
146
|
# Default port 8080
|
|
32
|
-
npx
|
|
147
|
+
npx emceepee-http
|
|
33
148
|
|
|
34
149
|
# Custom port
|
|
35
|
-
PORT=9000 npx
|
|
150
|
+
PORT=9000 npx emceepee-http
|
|
36
151
|
|
|
37
|
-
# With
|
|
38
|
-
npx
|
|
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": "
|
|
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
|
-
##
|
|
53
|
-
|
|
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
|
-
```
|
|
83
|
-
|
|
84
|
-
## Architecture
|
|
168
|
+
## Example Session
|
|
85
169
|
|
|
86
170
|
```
|
|
87
|
-
|
|
88
|
-
│ Claude │────▶│ MCP Proxy │────▶│ Backend MCP │
|
|
89
|
-
│ │ │ │ │ Server 1 │
|
|
90
|
-
│ │ │ Static │ └─────────────────┘
|
|
91
|
-
│ │◀────│ Tools │────▶┌─────────────────┐
|
|
92
|
-
│ │ │ │ │ Backend MCP │
|
|
93
|
-
└─────────┘ └───────────┘ │ Server 2 │
|
|
94
|
-
└─────────────────┘
|
|
95
|
-
```
|
|
171
|
+
User: Connect to http://localhost:3001/mcp as "gameserver"
|
|
96
172
|
|
|
97
|
-
|
|
173
|
+
LLM: [uses add_server]
|
|
174
|
+
Connected to gameserver successfully.
|
|
98
175
|
|
|
99
|
-
|
|
100
|
-
# Install dependencies
|
|
101
|
-
bun install
|
|
176
|
+
User: What can it do?
|
|
102
177
|
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
107
|
-
bun run typecheck
|
|
184
|
+
User: Get the player state
|
|
108
185
|
|
|
109
|
-
|
|
110
|
-
|
|
186
|
+
LLM: [uses read_resource with uri="minecraft://state"]
|
|
187
|
+
Player is at position (100, 64, -200), health: 18/20
|
|
188
|
+
```
|
|
111
189
|
|
|
112
|
-
|
|
113
|
-
bun run check
|
|
190
|
+
## Development
|
|
114
191
|
|
|
115
|
-
|
|
116
|
-
bun
|
|
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
|