Skip to main content

MCP Server for DiscoPoP - Enables Claude to interact with DiscoPoP profiling and analysis tools

Project description

DiscoPoP MCP Server

A Model Context Protocol (MCP) server that exposes DiscoPoP functionality to Claude, enabling Claude to execute instrumented code locally and request analysis of profiling data.

Overview

The DiscoPoP MCP Server bridges the gap between Claude and DiscoPoP's profiling and analysis tools. It allows Claude to:

  • Retrieve profiling information from executed instrumented code
  • Execute pattern analysis on profiled data
  • List and discover available profiling data
  • Process results and provide recommendations

Features

  • Standalone CLI executable - Run independently via command line
  • Local deployment - Uses stdio for direct Claude integration
  • Comprehensive logging - View all incoming calls and outgoing responses
  • Type-safe - Full type hints throughout
  • Extensible - Easy to add new tools and capabilities

Installation

Option 1: Install from source (Recommended for development)

cd mcp_server
pip install -e ".[dev]"

Option 2: Install as standalone package

pip install .

Option 3: Direct script usage

python mcp_server/server.py --debug

Quick Start

Run the server

discopop_mcp_server --debug

This starts the server in stdio mode, which is used by Claude. The --debug flag enables verbose logging.

Usage Examples

From the command line

# Basic usage
discopop_mcp_server

# With debug logging
discopop_mcp_server --debug

Integration with Claude Code

Use the built-in setup flag for easy integration:

discopop_mcp_server --setup claude_code

This automatically configures Claude Code to use the server, handling virtual environment detection, configuration directory creation, and path resolution.

See SETUP_GUIDE.md for more options or CLAUDE_INTEGRATION.md for detailed setup instructions.

Available Tools

1. get_configurations

Retrieves the list of defined execution configurations from a target project.

Parameters:

  • project_path (string, required): Path to the target project

Looks for configuration directories under <project_path>/.discopop/project/configs/.

Example:

{
  "project_path": "./my_project"
}

2. get_execution_results

Retrieves execution results from prior program executions.

Parameters:

  • project_path (string, required): Path to the target project

Reads <project_path>/.discopop/project/execution_results.json.

Example:

{
  "project_path": "./my_project"
}

Logging Output

The server logs all incoming and outgoing communication:

2026-05-19 10:30:00 - discopop-mcp - INFO - Starting DiscoPoP MCP Server (stdio mode)
2026-05-19 10:30:05 - discopop-mcp - INFO - → Incoming call: get_configurations
2026-05-19 10:30:05 - discopop-mcp - DEBUG - Arguments: {"project_path": "./my_project"}
2026-05-19 10:30:05 - discopop-mcp - INFO - ← Outgoing response: get_configurations

Enable --debug for full argument/response logging.

Testing

Run the test suite:

python -m unittest discover -s mcp_server -p "test_*.py" -v

Or with pytest:

pytest mcp_server/test_server.py -v

Architecture

Transport Mode

Uses Stdio Mode for local Claude integration:

  • Bidirectional communication via stdin/stdout
  • Lightweight, no additional dependencies
  • Direct integration with Claude Desktop

Tool Handler Flow

  1. Claude calls a tool
  2. Server logs the incoming call with arguments
  3. Handler processes the request
  4. Server logs the outgoing response
  5. Response returned to Claude

Shipping to Users

Method 1: PyPI Package (Recommended)

  1. Update version in pyproject.toml
  2. Build: python -m build
  3. Publish: python -m twine upload dist/*
  4. Users install: pip install discopop_mcp_server

Method 2: Source Distribution

Include in your DiscoPoP repository:

pip install git+https://github.com/discopop-tool/discopop.git#subdirectory=mcp_server

Method 3: Bundled Binary

Use PyInstaller to create standalone executables:

pip install pyinstaller
pyinstaller --onefile mcp_server/server.py --name discopop_mcp_server

Development

Adding New Tools

  1. Define tool schema in _register_tools():
Tool(
    name="your_tool",
    description="...",
    inputSchema={...}
)
  1. Add handler method:
def _handle_your_tool(self, arguments: dict[str, Any]) -> list[TextContent]:
    self._log_call("your_tool", arguments)
    # Implementation here
    self._log_response("your_tool", result)
    return [TextContent(type="text", text=json.dumps(result))]
  1. Register in tool call handler:
elif name == "your_tool":
    return self._handle_your_tool(arguments)

Type Checking

mypy mcp_server/server.py

Troubleshooting

Claude setup issues

  • Automatically configure Claude Code:
    discopop_mcp_server --setup claude_code
    
  • Verify the setup with:
    discopop_mcp_server --verify claude_code
    
  • See CLAUDE_INTEGRATION.md for detailed troubleshooting

Server won't start

  • Check Python version (requires 3.8+)
  • Verify MCP package is installed: pip show mcp
  • Run with --debug for detailed error messages

Claude can't connect

  • Verify server is running: discopop_mcp_server --debug
  • Check claude configuration points to correct command
  • Ensure stdio mode is being used (default)
  • Check setup status:
    discopop_mcp_server --status
    

Missing dependencies

# Install all dependencies
pip install -e ".[dev,sse]"

License

This software is part of DiscoPoP and is licensed under the 3-Clause BSD License. See the LICENSE file in the package base directory for details.

Support

For issues, questions, or contributions:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discopop_mcp_server-0.0.1a4.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

discopop_mcp_server-0.0.1a4-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file discopop_mcp_server-0.0.1a4.tar.gz.

File metadata

  • Download URL: discopop_mcp_server-0.0.1a4.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for discopop_mcp_server-0.0.1a4.tar.gz
Algorithm Hash digest
SHA256 100a579c442b1f200bb61c61e3b277a5fca596ec7ee681f7836ec26303f1226c
MD5 83e5a361b19a3de5a8c19a5e9f0e4f91
BLAKE2b-256 0ccbc131abb8795248e995c393fe933a843f6f85255e2e1ea0e032f1a0f0acde

See more details on using hashes here.

Provenance

The following attestation bundles were made for discopop_mcp_server-0.0.1a4.tar.gz:

Publisher: publish_mcp_server.yml on discopop-project/discopop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file discopop_mcp_server-0.0.1a4-py3-none-any.whl.

File metadata

File hashes

Hashes for discopop_mcp_server-0.0.1a4-py3-none-any.whl
Algorithm Hash digest
SHA256 498a330a88dfb8f346979c5b8eb74544ddd895497005df0070af316d60f7f640
MD5 311d849475f438db3bd682028416a060
BLAKE2b-256 4146b49c18a78c0d9f1decb6c3e8dd876690a7f408d3b190f31ff2e05f9d9001

See more details on using hashes here.

Provenance

The following attestation bundles were made for discopop_mcp_server-0.0.1a4-py3-none-any.whl:

Publisher: publish_mcp_server.yml on discopop-project/discopop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page