4.8 KiB
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 contactscreate_contact— Create new contactget_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!