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.