MCP: Connecting Claude Code to Your Tools

Day 13 - Integrate GitHub, Jira, databases, and more

MCP: Connecting Claude Code to Your Tools
Disponible en français

I've already explored the MCP protocol in my article Model Context Protocol (MCP): Revolution in LLM Integration. Today, we'll see how to use it concretely in Claude Code.

Reminder: What is MCP?

Model Context Protocol is an open standard that allows Claude to connect to external tools:

  • Databases
  • Issue trackers (Jira, GitHub Issues)
  • Cloud services
  • Internal APIs

It's the "USB-C of AI": a universal interface.

The Three Transport Types

TransportUsageExample
HTTPRemote serversCloud services
StdioLocal processesCLI tools
SSELegacy (deprecated)Old servers

Installing an MCP Server

claude mcp add --transport http github https://mcp.github.com/mcp

With authentication:

claude mcp add --transport http secure-api \
  --header "Authorization: Bearer $TOKEN" \
  https://api.example.com/mcp

Stdio Server (local process)

claude mcp add --transport stdio postgres \
  --env DATABASE_URL="postgres://user:pass@localhost/db" \
  -- npx postgres-mcp-server

Example: Airtable

claude mcp add --transport stdio airtable \
  --env AIRTABLE_API_KEY=$AIRTABLE_KEY \
  -- npx -y airtable-mcp-server

The Three Configuration Scopes

1. Local Scope (personal, this project)

Stored in ~/.claude.json, visible only to you.

claude mcp add --scope local ...

2. Project Scope (team, this repo)

Stored in .mcp.json at project root, versioned with Git.

claude mcp add --scope project ...

3. User Scope (personal, all projects)

Stored in ~/.claude.json, available everywhere.

claude mcp add --scope user ...

Managing MCP Servers

List Servers

claude mcp list

View Details

claude mcp get github

Remove a Server

claude mcp remove github

Check Status in Claude Code

/mcp

Configuration in .mcp.json

To share with the team:

{
  "mcpServers": {
    "github": {
      "transport": "http",
      "url": "https://mcp.github.com/mcp"
    },
    "postgres": {
      "transport": "stdio",
      "command": "npx",
      "args": ["postgres-mcp-server"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "jira": {
      "transport": "http",
      "url": "https://mcp.atlassian.com/jira",
      "headers": {
        "Authorization": "Bearer ${JIRA_TOKEN}"
      }
    }
  }
}

OAuth Authentication

Some MCP servers support OAuth 2.0:

/mcp

Then select the server and follow the authentication flow in the browser.

Practical Integration Examples

GitHub: Issues and PRs

claude mcp add --transport http github https://mcp.github.com/mcp

Usage:

> Create a GitHub issue for the authentication bug
> List open PRs on this repo
> Assign me to PR #42

Jira: Project Management

claude mcp add --transport http jira \
  --header "Authorization: Bearer $JIRA_TOKEN" \
  https://mcp.atlassian.com/jira

Usage:

> Create a Jira ticket for this feature
> Move ticket PROJ-123 to "In Review"
> What are my assigned tickets?

PostgreSQL: Database

claude mcp add --transport stdio postgres \
  --env DATABASE_URL="postgres://..." \
  -- npx postgres-mcp-server

Usage:

> Show me the users table schema
> Write a query for users inactive for 30 days
> How many records in the orders table?

Notion: Documentation

claude mcp add --transport http notion https://mcp.notion.com/mcp

Usage:

> Add this documentation to the "Architecture" page
> Search for last week's meeting notes

Token Management

MCP Token Limit

By default, Claude limits MCP responses to 25,000 tokens.

To increase:

export MAX_MCP_OUTPUT_TOKENS=50000

Warning at 10,000 Tokens

Claude warns you if an MCP response exceeds 10,000 tokens.

Workflow with MCP

Example: Feature from a Jira Ticket

# 1. Read the ticket
> Show me details for ticket PROJ-456

# 2. Claude reads via MCP and understands requirements

# 3. Plan
> ultrathink. Propose an implementation plan

# 4. Implement
> Implement step 1

# 5. Update Jira
> Update ticket PROJ-456 with status "In Progress"
  and add a comment on progress

Example: Debug with Sentry

claude mcp add --transport http sentry \
  --header "Authorization: Bearer $SENTRY_TOKEN" \
  https://mcp.sentry.io
> What are the most frequent errors this week?

# Claude analyzes via MCP

> Fix the error "TypeError: Cannot read property 'id' of null"
  appearing in src/api/users.ts

MCP Security

Verify Servers

Third-party MCP servers may have access to your data. Check:

  • Server source
  • Requested permissions
  • Privacy policy

Environment Variables

Never hardcode tokens:

{
  "env": {
    "API_KEY": "${MY_API_KEY}"  // ✅ Env variable
  }
}
{
  "env": {
    "API_KEY": "sk-abc123..."   // ❌ Plain token
  }
}

Creating Your Own MCP Server

For internal needs, you can create your own MCP server.

Basic structure (TypeScript):

import { Server } from '@modelcontextprotocol/sdk/server';

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

// Define exposed tools
server.setRequestHandler('tools/list', async () => ({
  tools: [{
    name: 'my_tool',
    description: 'Description of my tool',
    inputSchema: {
      type: 'object',
      properties: {
        param1: { type: 'string' }
      }
    }
  }]
}));

// Implement the tool
server.setRequestHandler('tools/call', async (request) => {
  const { name, arguments: args } = request.params;
  // Tool logic...
  return { result: '...' };
});

server.start();

What's Coming Tomorrow

In Day 14, we'll see Claude Code in VS Code and JetBrains - IDE integration for a graphical experience.


This article is part of the "Master Claude Code in 20 Days" series. Day 12: Hooks