Skip to main content
Glama

pcm

PCM (MCP but reversed), MCP for reverse engineering.

Features

  • Analysis

    • IDA

      • repl (IDAPython)

      • disassembly

      • decompilation

      • set types

      • ...

  • Memory

    • Engagement reports reports

- `get_function_by_name(name)`: Get a function by its name.
- `get_function_by_address(address)`: Get a function by its address.
- `get_current_address()`: Get the address currently selected by the user.
- `get_current_function()`: Get the function currently selected by the user.
- `list_functions()`: List all functions in the database.
- `decompile_function(address)`: Decompile a function at the given address using Hex-Rays.
- `disassemble_function(address)`: Get assembly code (address: instruction; comment) for a function.
- `get_entrypoints()`: Get all entrypoints in the binary.
- `get_function_blocks(address)`: Get all basic blocks in a function.
- `get_function_cfg(address)`: Get control flow graph for a function.
- `get_xrefs_to(address)`: Get all cross references to the given address.
- `get_xrefs_from(address)`: Get all cross references from the given address.
- `set_decompiler_comment(address, comment)`: Set a comment for a given address in the function pseudocode.
- `set_disassembly_comment(address, comment)`: Set a comment for a given address in the function disassembly.
- `rename_local_variable(function_address, old_name, new_name)`: Rename a local variable in a function.
- `rename_function(function_address, new_name)`: Rename a function.
- `set_function_prototype(function_address, prototype)`: Set a function's prototype.
- `set_local_variable_type(function_address, variable_name, new_type)`: Set a local variable's type.
- `create_structure_type(name, members, is_union)`: Create a new structure type.
- `get_metadata()`: Get metadata about the current IDB.
- `repl_idapython(content)`: Run IDAPython code and return the results with stdout/stderr captured.
- `add_note(title, content, address, tags)`: Add a new analysis note for the current binary.
- `update_note(note_id, title, content, tags)`: Update an existing note.
- `get_notes(file_md5, address, tag)`: Get analysis notes for a binary.
- `delete_note(note_id)`: Delete an analysis note.

Related MCP server: idalib-mcp-headless

Installations

Prerequisites:

  1. Clone the repository

    git clone https://github.com/rand-tech/pcm
  2. Add pcm to you mcp config example

    {
        "mcpServers": {
            "pcm": {
                "command": "uv",
                "args": [
                    "--directory",
                    "path_to/pcm",
                    "run",
                    "server.py"
                ]
            }
        }
    }
  3. Use the MCP

Related projects:

Attribution: This project is based on IDA Pro MCP by Duncan Ogilvie (@mrexodia). Thank you

License: This project is licensed under the MIT License - see the LICENSE file for details. The original code is also licensed under the MIT License.

Available Tools

24 tools
account-balanceC

Get your account balance from a crypto exchange

Inputs: apiKey (required), exchange (required), secret (required), marketType.

batch-get-tickersC

Get ticker information for multiple trading pairs at once

Inputs: exchange (required), symbols (required), marketType.

cache-statsB

Get CCXT cache statistics

Inputs: no named parameters.

clear-cacheB

Clear CCXT cache

Inputs: no named parameters.

clear-exchange-cacheB

Clear exchange instance cache to apply configuration changes

Inputs: no named parameters.

get-exchange-infoC

Get exchange information and status

Inputs: exchange (required), marketType.

get-funding-ratesC

Get current funding rates for perpetual contracts

Inputs: exchange (required), marketType, symbols.

get-leverage-tiersC

Get futures leverage tiers for trading pairs

Inputs: exchange (required), marketType, symbol.

get-marketsC

Get all available markets for an exchange

Inputs: exchange (required), page, pageSize.

get-market-typesB

Get market types supported by an exchange

Inputs: exchange (required).

get-ohlcvC

Get OHLCV candlestick data for a trading pair

Inputs: exchange (required), symbol (required), limit, timeframe.

get-orderbookC

Get market order book for a trading pair

Inputs: exchange (required), symbol (required), limit.

get-proxy-configB

Get the current proxy configuration

Inputs: no named parameters.

get-tickerC

Get current ticker information for a trading pair

Inputs: exchange (required), symbol (required), marketType.

get-tradesC

Get recent trades for a trading pair

Inputs: exchange (required), symbol (required), limit.

list-exchangesB

List all available cryptocurrency exchanges

Inputs: no named parameters.

place-futures-market-orderC

Place a futures market order

Inputs: amount (required), apiKey (required), exchange (required), secret (required), +4 more.

place-market-orderC

Place a market order on an exchange

Inputs: amount (required), apiKey (required), exchange (required), secret (required), +3 more.

set-leverageC

Set leverage for futures trading

Inputs: apiKey (required), exchange (required), leverage (required), secret (required), +2 more.

set-log-levelC

Set logging level

Inputs: level (required).

set-margin-modeC

Set margin mode for futures trading

Inputs: apiKey (required), exchange (required), marginMode (required), secret (required), +2 more.

set-market-typeC

Set default market type for all exchanges

Inputs: marketType (required), clearCache.

set-proxy-configC

Configure proxy settings for all exchanges

Inputs: enabled (required), url (required), clearCache, password, +1 more.

test-proxy-connectionC

Test the proxy connection with a specified exchange

Inputs: exchange (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    B3/5.0

    Scored across 24 tools

    Disambiguation4/5

    Most tools have distinct purposes targeting specific exchange operations like data retrieval (get-ticker, get-ohlcv), order placement (place-market-order, place-futures-market-order), and configuration (set-proxy-config, set-log-level). However, some overlap exists between clear-cache and clear-exchange-cache, which could cause minor confusion as both relate to cache management.

    Naming Consistency5/5

    Tool names consistently follow a verb_noun pattern throughout, such as get-ticker, set-leverage, and clear-cache. This uniform naming convention makes the tool set predictable and easy to navigate, with no deviations in style or structure.

    Tool Count3/5

    With 24 tools, the count is borderline high for a cryptocurrency exchange server, potentially feeling heavy as it includes many specific operations. While comprehensive, it might overwhelm agents with its breadth, though it aligns with the domain's complexity.

    Completeness4/5

    The tool set provides extensive coverage for cryptocurrency exchange operations, including data fetching, order management, and configuration. Minor gaps exist, such as the absence of tools for canceling orders or managing account details beyond balance, but agents can likely work around these with the available tools.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      A headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.
      27
      -
    • A
      license
      A
      quality
      C
      maintenance
      A multi-backend MCP server that exposes binary analysis capabilities from IDA Pro and Ghidra, allowing LLMs to directly drive reverse-engineering tools via natural language.
      11
      177
      Apache 2.0