MCP Hacking - Basics

Before we start hacking MCP servers, let's get basics right.

Third World Skeptical Kid meme. Top caption: BEFORE MCP. Bottom caption: YOU WERE THE API.

MCP

MCP stands for Model Context Protocol.

Think of MCP like a USB-C port for AI applications.

Just as USB-C provides a standard interface for connecting devices like keyboards, monitors, and storage to any compatible computer, MCP provides a standard protocol for connecting AI applications to external tools and data sources.

By default, an LLM like ChatGPT or Claude can't create a Jira ticket. This is where Jira MCP comes into picture. You connect Jira MCP with your LLM and now it has permissions and knowledge to create Jira tickets.


How the pieces fit:

MCP host containing Claude Desktop, Cursor, VS Code and Codex with an MCP client at its edge, connecting to a Jira MCP server, which connects to the Jira Cloud REST API.

MCP host can be apps like Claude Desktop, Codex app or IDE like VS Code, Cursor

MCP client is part of MCP host, which initiates the connections. It can be configured at

ToolProject scopeGlobal scope
Claude Code .mcp.json (repo root) ~/.claude.json
Claude Desktop not supported ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
%APPDATA%\Claude\claude_desktop_config.json (Windows)
Cursor .cursor/mcp.json ~/.cursor/mcp.json
VS Code .vscode/mcp.json user profile, via MCP: Open User Configuration
Codex .codex/config.toml (trusted projects only) ~/.codex/config.toml

MCP server can be JIRA MCP built by Atlassian or built by you. It contain bunch of code which can talk with external service.

External Service can be the system MCP server connects to. Jira, GitHub, Slack, etc


MCP Client Configuration

Two shapes:

1. Local server (stdio) - used when the MCP server runs on your own computer

{
  "mcpServers": {
    "jira": {
      "command": "npx",
      "args": ["-y", "@some/jira-mcp-server"],
      "env": { "JIRA_API_TOKEN": "..." }
    }
  }
}

command is the executable to run,
args are the arguments passed to it, and
env sets environment variables for the server process.

2. Remote server (HTTP/SSE) - already running somewhere, the host just connects:

SSE (LEGACY)

{
  "mcpServers": {
    "jira": {
      "type": "sse",
      "url": "https://mcp.atlassian.com/v1/sse"
    }
  }
}

Streamable HTTP

{
  "mcpServers": {
    "jira": {
      "type": "http",
      "url": "https://mcp.atlassian.com/v1/mcp"
    }
  }
}

mcpServers is root key, it depends on your MCP Host.

  • Claude Code, Claude Desktop, Cursor - mcpServers
  • VS Code - servers
  • Codex - [mcp_servers.<name>] in TOML

jira is MCP server name

url: remote MCP server URL

type: transport type, like stdio, sse, http


MCP Server Capabilities

There are 3 main capabilities:
1- Tools
2- Resources
3- Prompts

1. Tools:

Actions the MCP server can take.
Example:
Tool name:

send_email

User Query to AI:

send I am gonna be late email to my manager

The user never named the tool. The model read the request, saw send_email in the list, and chose it.

2.Resources:

Resources are things MCP server can read or show. A resource is like a file, document, log, or database record.
Example:
Resource name:

hr://employees/records

User query to AI:

Show me newly joined employees from 20 July to 27 July 2026

3.Prompts:

Saved workflows the user picks by name.
Example:
Prompt name:

create_error_report

Prompt Instructions:

1. Read the error
2. Explain what happened
3. Find the possible reason
4. Suggest a fix
5. Create a short report

User Query to AI:

/create_error_report

Reference

MCP Model Context Protocol AI Security