emceepee 0.2.0
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 +21 -0
- package/README.md +121 -0
- package/dist/mcp-proxy.js +63 -0
- package/package.json +53 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Anthropic
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# MCP Proxy
|
|
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.
|
|
4
|
+
|
|
5
|
+
## Problem
|
|
6
|
+
|
|
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
|
+
|
|
9
|
+
## Solution
|
|
10
|
+
|
|
11
|
+
MCP Proxy provides a **static set of meta-tools** that allow Claude to:
|
|
12
|
+
|
|
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
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install mcp-proxy
|
|
22
|
+
# or
|
|
23
|
+
bun add mcp-proxy
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
### Starting the Server
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Default port 8080
|
|
32
|
+
npx mcp-proxy
|
|
33
|
+
|
|
34
|
+
# Custom port
|
|
35
|
+
PORT=9000 npx mcp-proxy
|
|
36
|
+
|
|
37
|
+
# With initial backend servers
|
|
38
|
+
npx mcp-proxy --config ./servers.json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Configuration File
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"servers": [
|
|
46
|
+
{ "name": "minecraft", "url": "http://localhost:3001/mcp" },
|
|
47
|
+
{ "name": "other", "url": "http://localhost:4000/mcp" }
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Available Tools
|
|
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
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
┌─────────┐ ┌───────────┐ ┌─────────────────┐
|
|
88
|
+
│ Claude │────▶│ MCP Proxy │────▶│ 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
|
|
102
|
+
|
|
103
|
+
# Run in development
|
|
104
|
+
bun run dev
|
|
105
|
+
|
|
106
|
+
# Type check
|
|
107
|
+
bun run typecheck
|
|
108
|
+
|
|
109
|
+
# Lint
|
|
110
|
+
bun run lint
|
|
111
|
+
|
|
112
|
+
# Run all checks
|
|
113
|
+
bun run check
|
|
114
|
+
|
|
115
|
+
# Build for production
|
|
116
|
+
bun run build
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
MIT
|