Build a custom MCP server
Expose your own data and tools to Claude
When to build a custom MCP server
Pre-built MCP servers cover common tools (Gmail, Calendar, Drive). But your agency has unique data sources — client databases, proprietary tools, internal APIs, custom reporting systems. A custom MCP server exposes these to Claude, making that data queryable and actionable.
Simple MCP server example: client status API
// server.js
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server(
{ name: 'bconverse-clients', version: '1.0.0' },
{ capabilities: { tools: {} } }
);
server.setRequestHandler('tools/list', async () => ({
tools: [
{
name: 'get_client_status',
description: 'Get current project status for a client',
inputSchema: {
type: 'object',
properties: {
client_name: { type: 'string' }
},
required: ['client_name']
}
}
]
}));
server.setRequestHandler('tools/call', async (request) => {
if (request.params.name === 'get_client_status') {
const clientName = request.params.arguments.client_name;
const status = await fetchClientStatus(clientName);
return { content: [{ type: 'text', text: JSON.stringify(status) }] };
}
});
const transport = new StdioServerTransport();
await server.connect(transport);
Good candidates for custom MCP tools
- Query your project management database
- Pull from your time tracking system
- Access client-specific APIs you work with regularly
- Read from your invoicing system
- Custom reporting data specific to your operation
Plan before you build: Before writing any code, ask: “What data do I find myself copying into Claude conversations repeatedly?” That repeated manual step is your first custom MCP tool.