initial commit after one day coding agent session
This commit is contained in:
commit
372af75b90
88 changed files with 22694 additions and 0 deletions
181
docs/HTTP_TRANSPORT.md
Normal file
181
docs/HTTP_TRANSPORT.md
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
# HTTP Transport Configuration Example
|
||||
|
||||
This example shows how to configure MCP-Forge to connect to external HTTP-based MCP servers.
|
||||
|
||||
## Configuration File
|
||||
|
||||
```yaml
|
||||
# config.yaml
|
||||
server:
|
||||
host: localhost
|
||||
port: 3000
|
||||
podman_socket: /run/user/1000/podman/podman.sock
|
||||
|
||||
security:
|
||||
audit_log: ./logs/audit.log
|
||||
enforce_resource_limits: true
|
||||
allow_network: false
|
||||
|
||||
execution:
|
||||
default_backend: simple
|
||||
default_timeout: 300
|
||||
max_timeout: 1800
|
||||
default_memory: 512m
|
||||
max_memory: 2g
|
||||
base_image: docker.io/library/python:3.13-slim
|
||||
|
||||
environment_builder:
|
||||
enabled: true
|
||||
uv_cache_path: ./cache/uv
|
||||
max_packages_per_build: 50
|
||||
max_build_time: 600
|
||||
max_image_size: 2147483648
|
||||
max_concurrent_builds: 3
|
||||
build_rate_limit:
|
||||
requests: 10
|
||||
period: 60
|
||||
package_validation:
|
||||
use_allowlist: true
|
||||
allowlist_path: ./config/allowlist.txt
|
||||
blocklist_path: ./config/blocklist.txt
|
||||
require_approval_patterns: []
|
||||
|
||||
# Connect to external MCP servers
|
||||
mcp_tools:
|
||||
# HTTP-based MCP server
|
||||
remote_api:
|
||||
transport: http
|
||||
url: http://localhost:8006/mcp
|
||||
headers:
|
||||
Authorization: "Bearer your-token-here"
|
||||
X-Custom-Header: "value"
|
||||
|
||||
# SSE-based MCP server
|
||||
sse_service:
|
||||
transport: sse
|
||||
url: http://localhost:9000/events
|
||||
headers:
|
||||
Authorization: "Bearer your-token-here"
|
||||
|
||||
# Traditional stdio-based MCP server (still supported)
|
||||
filesystem:
|
||||
transport: stdio # default, can be omitted
|
||||
command: uvx
|
||||
args: [mcp-server-filesystem, /path/to/workspace]
|
||||
env:
|
||||
SOME_VAR: value
|
||||
```
|
||||
|
||||
## Transport Types
|
||||
|
||||
### 1. HTTP Transport
|
||||
|
||||
Used for HTTP-based MCP servers that communicate via HTTP requests.
|
||||
|
||||
```yaml
|
||||
remote_api:
|
||||
transport: http
|
||||
url: http://localhost:8006/mcp
|
||||
headers:
|
||||
Authorization: "Bearer token123"
|
||||
Content-Type: "application/json"
|
||||
```
|
||||
|
||||
**Required:**
|
||||
- `url`: HTTP endpoint URL
|
||||
|
||||
**Optional:**
|
||||
- `headers`: HTTP headers (dict)
|
||||
|
||||
### 2. SSE Transport
|
||||
|
||||
Used for Server-Sent Events (SSE) based MCP servers.
|
||||
|
||||
```yaml
|
||||
sse_service:
|
||||
transport: sse
|
||||
url: http://localhost:9000/events
|
||||
headers:
|
||||
Authorization: "Bearer token123"
|
||||
```
|
||||
|
||||
**Required:**
|
||||
- `url`: SSE endpoint URL
|
||||
|
||||
**Optional:**
|
||||
- `headers`: HTTP headers (dict)
|
||||
|
||||
### 3. Stdio Transport (Default)
|
||||
|
||||
Traditional command-based MCP servers.
|
||||
|
||||
```yaml
|
||||
filesystem:
|
||||
transport: stdio # default, can be omitted
|
||||
command: uvx
|
||||
args: [mcp-server-filesystem, /workspace]
|
||||
env:
|
||||
PATH: /usr/bin
|
||||
```
|
||||
|
||||
**Required:**
|
||||
- `command`: Executable command
|
||||
|
||||
**Optional:**
|
||||
- `args`: Command arguments (list)
|
||||
- `env`: Environment variables (dict)
|
||||
|
||||
## Running the Server
|
||||
|
||||
```bash
|
||||
# Start with HTTP transport configuration
|
||||
uv run mcp-forge --config config.yaml
|
||||
|
||||
# Or with SSE transport
|
||||
uv run mcp-forge --config config.yaml --transport sse --host 0.0.0.0 --port 8080
|
||||
```
|
||||
|
||||
## Client Connection
|
||||
|
||||
Once the server is running, MCP clients can connect using the configured transport:
|
||||
|
||||
```python
|
||||
from fastmcp import Client
|
||||
from fastmcp.client.transports import StreamableHttpTransport
|
||||
|
||||
# Connect to MCP-Forge server via HTTP
|
||||
transport = StreamableHttpTransport(url="http://localhost:3000/mcp")
|
||||
client = Client(transport)
|
||||
|
||||
async with client:
|
||||
# List available tools (from all configured MCP servers)
|
||||
tools = await client.list_tools()
|
||||
print(tools)
|
||||
```
|
||||
|
||||
## Testing the Connection
|
||||
|
||||
You can test your HTTP transport configuration using curl:
|
||||
|
||||
```bash
|
||||
# Test HTTP endpoint
|
||||
curl -X POST http://localhost:8006/mcp \
|
||||
-H "Authorization: Bearer your-token-here" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 1}'
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Connection Refused
|
||||
- Verify the external MCP server is running
|
||||
- Check the URL and port are correct
|
||||
- Ensure firewall rules allow the connection
|
||||
|
||||
### Authentication Errors
|
||||
- Verify the authorization header is correct
|
||||
- Check if the external server requires specific headers
|
||||
|
||||
### Tool Not Found
|
||||
- Ensure the external MCP server exposes the expected tools
|
||||
- Check the server logs for any errors
|
||||
Loading…
Add table
Add a link
Reference in a new issue