Skip to main content
Glama
WALKTHROUGH.md6.67 kB
# MCP Layer Implementation - Walkthrough ## Overview Implemented TCP transport support for the MCP server and verified all core world generation tools are working. ## Changes Made ### Transport Layer #### [NEW] [tcp.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/transport/tcp.ts) - Implemented `TCPServerTransport` class using Node.js `net.Server` - Uses newline-delimited JSON format (same as stdio) - Supports multiple clients sequentially (one at a time) #### [MODIFY] [index.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/index.ts#L31-L47) - Added command-line argument parsing for `--tcp` and `--port` - Dynamically imports TCP transport when needed - Defaults to stdio if no flags provided ```diff + const args = process.argv.slice(2); + const transportType = args.includes('--tcp') ? 'tcp' : 'stdio'; + + if (transportType === 'tcp') { + const { TCPServerTransport } = await import('./transport/tcp.js'); + const portIndex = args.indexOf('--port'); + const port = portIndex !== -1 ? parseInt(args[portIndex + 1], 10) : 3000; + + const transport = new TCPServerTransport(port); + await server.connect(transport); + console.error(`RPG MCP Server running on TCP port ${port}`); + } else { const transport = new StdioServerTransport(); await server.connect(transport); console.error('RPG MCP Server running on stdio'); + } ``` ### Tool Registration #### [MODIFY] [index.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/index.ts#L12-L30) - Fixed tool registration to include description parameter - Correctly uses `inputSchema.shape` for MCP SDK compatibility ### Test Coverage #### [NEW] [tools-simple.test.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/tests/server/tools-simple.test.ts) - Unit test for `handleGenerateWorld` tool - Verifies tool output format and content ## Verification Results ### Unit Tests ``` ✓ tests/server/tools-simple.test.ts (1) # MCP Layer Implementation - Walkthrough ## Overview Implemented TCP transport support for the MCP server and verified all core world generation tools are working. ## Changes Made ### Transport Layer #### [NEW] [tcp.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/transport/tcp.ts) - Implemented `TCPServerTransport` class using Node.js `net.Server` - Uses newline-delimited JSON format (same as stdio) - Supports multiple clients sequentially (one at a time) #### [MODIFY] [index.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/index.ts#L31-L47) - Added command-line argument parsing for `--tcp` and `--port` - Dynamically imports TCP transport when needed - Defaults to stdio if no flags provided ```diff + const args = process.argv.slice(2); + const transportType = args.includes('--tcp') ? 'tcp' : 'stdio'; + + if (transportType === 'tcp') { + const { TCPServerTransport } = await import('./transport/tcp.js'); + const portIndex = args.indexOf('--port'); + const port = portIndex !== -1 ? parseInt(args[portIndex + 1], 10) : 3000; + + const transport = new TCPServerTransport(port); + await server.connect(transport); + console.error(`RPG MCP Server running on TCP port ${port}`); + } else { const transport = new StdioServerTransport(); await server.connect(transport); console.error('RPG MCP Server running on stdio'); + } ``` ### Tool Registration #### [MODIFY] [index.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/src/server/index.ts#L12-L30) - Fixed tool registration to include description parameter - Correctly uses `inputSchema.shape` for MCP SDK compatibility ### Test Coverage #### [NEW] [tools-simple.test.ts](file:///c:/Users/Vario/OneDrive/Desktop/MCP%20Servers/rpg-mcp/tests/server/tools-simple.test.ts) - Unit test for `handleGenerateWorld` tool - Verifies tool output format and content ## Verification Results ### Unit Tests ``` ✓ tests/server/tools-simple.test.ts (1) ✓ Server Tools (1) ✓ should generate a world ``` **Result**: ✅ Tools work correctly ### Current Status ### Completed - ✅ TCP Transport implementation - ✅ Stdio Transport (existing) - ✅ Transport selection via CLI args - ✅ Tool registration (Core, Combat, CRUD) - ✅ Advanced Tool Use (Examples in descriptions) - ✅ Full Integration Tests (Stdio + TCP) ### Remaining Work - ⏳ Event Streaming (Next Phase) ## Usage Examples ### Starting the Server **Stdio (default)**: ```bash npx tsx src/server/index.ts ``` **TCP**: ```bash npx tsx src/server/index.ts --tcp --port 3000 ``` **Unix Socket**: ```bash npx tsx src/server/index.ts --unix /tmp/rpg-mcp.sock # OR on Windows (Named Pipe) npx tsx src/server/index.ts --unix \\.\pipe\rpg-mcp ``` ### CI/CD We have configured a GitHub Actions workflow `.github/workflows/ci.yml` to run tests on every push. ### Event Streaming Subscribe to real-time events using `subscribe_to_events`. **Request**: ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "subscribe_to_events", "arguments": { "topics": ["combat", "world"] } } } ``` **Notification (Server -> Client)**: ```json { "jsonrpc": "2.0", "method": "notifications/rpg/event", "params": { "topic": "combat", "payload": { "type": "turn_changed", "round": 2, "activeParticipantId": "hero-1" } } } ``` } } } ``` ### Auditing & Replay All tool executions are automatically logged to the `audit_logs` table in the SQLite database. These logs include: - Action name - Arguments - Result/Error - Timestamp The `ReplayEngine` can be used to reconstruct the state of the world by re-executing these logs. ### Calling Tools **Example: generate_world** ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "generate_world", "arguments": { "seed": "my-seed", "width": 50, "height": 50 } } } ``` **Response**: ```json { "jsonrpc": "2.0", "id": 1, "result": { "content": [{ "type": "text", "text": "{\"message\": \"World generated successfully\", ...}" }] } } ``` **Example: create_encounter** ```json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "create_encounter", "arguments": { "seed": "battle-1", "participants": [...] } } } ``` ## Next Steps Proceed to **Section 9: Event Streaming** in the Task Map to implement Pub/Sub and SSE.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mnehmos/rpg-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server