# Contributing to MCPEngine Thank you for your interest in contributing! This guide will help you add new MCP servers to the project. ## Adding a New Server ### 1. Check if it's needed Before starting, check: - Is there already an MCP server for this platform? - Does the platform have a public API? - Is there demand for this integration? ### 2. Set up the server structure ```bash # Copy the template cp -r servers/template servers/your-platform cd servers/your-platform ``` ### 3. Update package.json ```json { "name": "@mcpengine/your-platform", "version": "1.0.0", "description": "MCP server for YourPlatform", "main": "dist/index.js", "scripts": { "build": "tsc", "start": "node dist/index.js", "dev": "tsc --watch" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0" }, "devDependencies": { "@types/node": "^20.0.0", "typescript": "^5.0.0" } } ``` ### 4. Implement the server Edit `src/index.ts`: ```typescript import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; // API client setup const API_KEY = process.env.YOURPLATFORM_API_KEY; const API_BASE = 'https://api.yourplatform.com/v1'; // Create server instance const server = new Server( { name: 'yourplatform-mcp-server', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); // List available tools server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'get_contacts', description: 'Get list of contacts', inputSchema: { type: 'object', properties: { limit: { type: 'number', description: 'Number of contacts to return', }, }, }, }, // Add more tools... ], }; }); // Handle tool calls server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; switch (name) { case 'get_contacts': { const response = await fetch(`${API_BASE}/contacts?limit=${args.limit}`, { headers: { 'Authorization': `Bearer ${API_KEY}`, }, }); const data = await response.json(); return { content: [ { type: 'text', text: JSON.stringify(data, null, 2), }, ], }; } default: throw new Error(`Unknown tool: ${name}`); } }); // Start server async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error('YourPlatform MCP server running on stdio'); } main().catch((error) => { console.error('Server error:', error); process.exit(1); }); ``` ### 5. Add a README Create `servers/your-platform/README.md`: ```markdown # YourPlatform MCP Server MCP server for YourPlatform API integration. ## Setup 1. Get API key from [YourPlatform Dashboard](https://platform.com/settings) 2. Set environment variable: ```bash export YOURPLATFORM_API_KEY="your_key_here" ``` ## Available Tools - `get_contacts` — Retrieve contacts - `create_contact` — Create new contact - `get_deals` — List deals - ... (list all tools) ## Usage with Claude Desktop Add to `claude_desktop_config.json`: \```json { "mcpServers": { "yourplatform": { "command": "node", "args": ["/path/to/mcpengine/servers/yourplatform/dist/index.js"], "env": { "YOURPLATFORM_API_KEY": "your_key" } } } } \``` ``` ### 6. Build and test ```bash npm install npm run build npm start ``` Test with Claude Desktop or another MCP client. ### 7. Create a landing page Generate a marketing page: ```bash cd landing-pages node site-generator.js yourplatform ``` Edit `yourplatform.html` to customize. ### 8. Submit PR ```bash git checkout -b feature/add-yourplatform-server git add servers/yourplatform landing-pages/yourplatform.html git commit -m "Add YourPlatform MCP server" git push origin feature/add-yourplatform-server ``` Open a PR with: - Description of the platform - List of implemented tools - Testing notes - Any API limitations ## Code Style - Use TypeScript - Follow existing server patterns - Add comprehensive error handling - Include JSDoc comments for tools - Keep API keys in environment variables ## Testing Checklist - [ ] All tools work correctly - [ ] Error handling for API failures - [ ] Environment variables documented - [ ] README includes setup instructions - [ ] No hardcoded credentials - [ ] TypeScript compiles without errors - [ ] Tested with Claude Desktop ## Questions? Open a [GitHub Discussion](https://github.com/yourusername/mcpengine/discussions) if you need help!