Skip to content

AI Tools

MCP Servers — Giving Claude Hands

All articles
🤝 🔌

Open Standard for AI Tool Integration. Claude Just Got Powers.

Claude can think. But it can't do. It can't open your Supabase database and query customer records. It can't check Linear tickets in real time. It can't push updates to Pipedrive without you copying text back and forth. Until now, every AI integration felt like teaching a very smart human who had no hands.

Enter Model Context Protocol. MCP is Anthropic's open standard for giving Claude (and any Claude-compatible tool) direct access to your systems. Hook up an MCP server for your database, your CRM, your issue tracker, your anything. Now Claude reads live data, understands context, and acts on your behalf — all inside Claude Desktop, Claude Code, or your own AI agent. Suddenly Claude has hands. And they're connected to your stack.

Why MCP Beats Custom Function Calling

You've probably built tool-use integrations before. A custom function calling handler that maps Claude's function calls to your API. Works, but you own the whole stack: the schema, the validation, the security model, the error handling, the versioning. Now multiply that by 5 tools. By 10 tools. By a team of engineers maintaining custom integrations for every tool you use.

MCP flips this. Anthropic defines the protocol. Tool vendors (or the open source community) build MCP servers. You install the server. Claude talks to it using a standard interface. New tool? Same setup. Security is at the protocol level. Versioning is solved. You're not managing custom JSON schemas anymore — you're plugging in batteries-included servers.

Plus: MCP servers are portable. Wire up Supabase MCP in Claude Desktop, Claude Code, and your custom agent using the same server binary. No reimplementing the integration for each tool. One MCP server. Everywhere Claude runs.

4 Official MCP Servers You Should Install Today

1. Supabase MCP — Query Your Database in Chat

Supabase is Postgres + Auth + Real-time + Edge Functions. The Supabase MCP server (built by Anthropic) lets Claude query your database directly. "Who's our biggest customer?" Claude reads the database. "Flag all orders over $10k from last week" — Claude runs the query, gets the results, works with real data.

{`# Install via Claude Desktop
# ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": ["@supabase/mcp-server"],
      "env": {
        "SUPABASE_URL": "https://your-project.supabase.co",
        "SUPABASE_API_KEY": "your-anon-key"
      }
    }
  }
}

# In Claude Desktop chat:
# "Pull a list of users with email domain @company.com from the users table"
# MCP handles the schema discovery, runs the query, returns results`}

Use case: Aidxn's Rebuild Relief team uses Supabase MCP to surface claim data without leaving Claude. "How many Ballarat claims from January?" Claude queries, gets the count, surfaces context for an agent building a report.

2. Linear MCP — Read Your Issue Tracker in Real Time

Linear is your issue tracker. MCP gives Claude full read access to projects, issues, status, comments. Useful for: "Summarise the open bugs in the auth epic", "Who's responsible for performance issues?", "What broke last sprint?"

{`# ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "linear": {
      "command": "npx",
      "args": ["linear-mcp"]
    }
  }
}

# In Claude Desktop:
# "Show me all issues in the 'In Progress' status"
# "Who reported the most bugs this sprint?"
# "Link me the GitHub PR for issue LIN-42"`}

Combine with Supabase MCP and Claude can cross-reference: "Show me all open bugs that touch the payment flow in our codebase." Claude reads Linear issues, queries the code via Supabase, correlates context.

3. Pipedrive MCP — Read CRM Data Without Leaving Chat

Pipedrive is sales. Pipeline stage, deal value, contact info. The Pipedrive MCP (community-maintained) lets Claude read deals, orgs, persons. "How many deals are in the final stage?", "Who's our highest-value prospect?", "Summarise the top 5 opportunities."

{`# ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "pipedrive": {
      "command": "npx",
      "args": ["pipedrive-mcp"],
      "env": {
        "PIPEDRIVE_API_TOKEN": "your-token"
      }
    }
  }
}

# In Claude Desktop:
# "Summarise our pipeline: how much value in each stage?"
# "Which deals are older than 30 days with no activity?"
# "List all contacts for Acme Corp"`}

Aidxn uses this in Rebuild Relief's sales operations: "Summarise all open claims in Pipedrive + surface related Supabase data." One chat, multiple systems, unified context.

4. GitHub MCP — Repository Context in Chat

GitHub MCP (official) lets Claude read repos, files, PRs, issues, branches. "Show me the latest commits in main", "List all PRs awaiting review", "What's in the package.json?"

{`# ~/.claude/claude_desktop_config.json
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["github-mcp"],
      "env": {
        "GITHUB_TOKEN": "your-pat-token"
      }
    }
  }
}

# In Claude Desktop:
# "Show me the last 10 commits to the payment feature branch"
# "What dependencies have CVE alerts?"
# "Summarise all open PRs from the last week"`}

Use during code reviews: "Pull this PR context + Supabase schema + Linear issue + the related code. Summarise the change." One prompt. Claude reads all four systems in parallel.

Building a Custom MCP Server in TypeScript

None of those four fit your stack? Build a custom MCP server. It's a Node.js process that speaks the MCP protocol. Wrap your internal API, your vendor SDK, your anything, and Claude can use it.

{`// src/index.ts — Custom MCP server (TypeScript + @modelcontextprotocol/sdk)
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";

const server = new Server({
  name: "my-company-api",
  version: "1.0.0",
});

// Define tools that Claude can call
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "query_customers",
      description: "Look up a customer by name or ID",
      inputSchema: {
        type: "object",
        properties: {
          query: { type: "string", description: "Customer name or ID" },
        },
        required: ["query"],
      },
    },
    {
      name: "create_order",
      description: "Create a new order for a customer",
      inputSchema: {
        type: "object",
        properties: {
          customerId: { type: "string" },
          items: { type: "array", items: { type: "object" } },
          total: { type: "number" },
        },
        required: ["customerId", "items"],
      },
    },
  ],
}));

// Handle tool calls
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  if (name === "query_customers") {
    // Call your internal API or database
    const result = await fetch("https://api.mycompany.com/customers", {
      method: "POST",
      body: JSON.stringify({ q: args.query }),
      headers: { Authorization: \`Bearer \${process.env.API_KEY}\` },
    }).then(r => r.json());
    return { content: [{ type: "text", text: JSON.stringify(result) }] };
  }

  if (name === "create_order") {
    // Another API call
    const result = await fetch("https://api.mycompany.com/orders", {
      method: "POST",
      body: JSON.stringify(args),
      headers: { Authorization: \`Bearer \${process.env.API_KEY}\` },
    }).then(r => r.json());
    return { content: [{ type: "text", text: \`Order created: \${result.id}\` }] };
  }

  return { content: [{ type: "text", text: "Unknown tool" }] };
});

// Start the server
const transport = new StdioServerTransport();
await server.connect(transport);`}

Install in Claude Desktop the same way:

{`{
  "mcpServers": {
    "my-api": {
      "command": "node",
      "args": ["/path/to/dist/index.js"],
      "env": {
        "API_KEY": "your-secret-key"
      }
    }
  }
}`}

Now Claude can query_customers and create_order as if they were native to the model. Zero custom integration code on your side.

Security — How MCP Keeps You Safe

Nervous about giving Claude access to your database? Smart. MCP has you covered.

First: read-only by default. Most official MCP servers (Supabase, Linear, GitHub) expose read operations only. No "delete everything" accidental calls. If you need write operations, you explicitly define them in the server and expose only what you want Claude to touch.

Second: credentials are server-side. Your API keys live in the MCP server config (or environment variables), not in Claude's context. Claude never sees the raw credentials. It calls the MCP server, which authenticates, runs the query, and returns results.

Third: you control the schema. When you define a tool in your MCP server, you control what inputs Claude can pass and what outputs it gets back. Validation happens at the protocol level.

Fourth: request logging and auditing. Wire up your MCP server logs to your security dashboard. See exactly what Claude queried, when, from which session, and what it got back.

6 FAQs

Can I use MCP servers in Claude Code?

Yes. Claude Code (the official CLI) also supports MCP servers via the same config format. Put your servers in `~/.claude/claude_desktop_config.json` and Claude Code sees them on startup.

Does MCP work with other AI models (GPT, Grok, etc)?

That's the point. MCP is vendor-neutral. In theory, any LLM can speak MCP. In practice, Anthropic built it, so Claude support is best-in-class. GPT support is pending. By 2027, expect every major model to have MCP bindings.

What if my vendor doesn't have an official MCP server?

Build one (using the TypeScript template above) or wait for the community. MCP is open source. If your vendor is popular, someone will build a server for it. If they won't, you can publish yours.

How do I debug if Claude calls the MCP server wrong?

MCP servers emit logs. Run your server in a terminal (not daemonized) and watch the output. Claude Code also logs MCP calls in its debug console. "Tool call failed" messages include the error from the server. Iterate on the server's error handling.

Can I chain multiple MCP servers in one Claude conversation?

Yes. Define multiple servers in `claude_desktop_config.json`. Claude sees all available tools and can call any of them in the same message. "Query the database, check Linear, and post to Slack" — one prompt, three servers.

Will using MCP slow Claude down?

MCP is designed for speed. Network latency depends on your server. If your MCP server hits your database in 100ms, Claude gets the response in ~150ms. Compare that to Claude working blind and asking you to paste data back — MCP is 10–100x faster because there's no human-in-the-loop copying text.

The Bottom Line

MCP is Anthropic's answer to the "Claude can think but not do" problem. It's an open protocol, it's getting production-ready fast, and it's the fastest way to give Claude hands. Install Supabase MCP and query your database in chat. Wire Pipedrive MCP and let Claude read your sales pipeline. Build a custom server for your API and Claude can integrate with anything. MCP isn't the future of AI integration — it's the present. If you're building a multi-tool AI workflow for your startup, see the pricing page for how Aidxn scaffolds MCP servers during launches. Or dig into the system prompt engineering post for how to wire brand voice into Claude agents using a locked system prompt. Start with one MCP server. You'll want a dozen by next month.

Let us make some quick suggestions?
Please provide your full name.
Please provide your phone number.
Please provide a valid phone number.
Please provide your email address.
Please provide a valid email address.
Please provide your brand name or website.
Please provide your brand name or website.