mcpengine/docs/CONTRIBUTING.md

4.8 KiB

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

# Copy the template
cp -r servers/template servers/your-platform

cd servers/your-platform

3. Update package.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:

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:

# 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:

cd landing-pages
node site-generator.js yourplatform

Edit yourplatform.html to customize.

8. Submit PR

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 if you need help!