RevEng.AI MCP server
The platform exposes its capabilities as Model Context Protocol tools so any compliant client (Claude Desktop, Cursor, VS Code, Cline, custom agents) can call them with a single configuration entry.
Endpoint
https://api.reveng.ai/mcp/
Authentication
Use your existing RevEng.AI API key (or a signed JWT from the auth service) as a Bearer token.
Client configuration
Pick your client below. All of them speak the same protocol — the only differences are the file location and the wrapping JSON key.
Claude Code
claude mcp add-json reveng-platform \
'{"type":"http","url":"https://api.reveng.ai/mcp/","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'
Verify with claude mcp list. The entry is written to ~/.claude.json under mcpServers and is picked up immediately — no restart needed.
Claude Desktop
{
"mcpServers": {
"reveng-platform": {
"type": "http",
"url": "https://api.reveng.ai/mcp/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Quit Claude Desktop fully (Cmd+Q / File → Quit, not just close the window) and reopen it. The server appears in the tools menu when configured correctly.
Cursor
{
"mcpServers": {
"reveng-platform": {
"type": "http",
"url": "https://api.reveng.ai/mcp/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Open Cursor Settings → MCP and toggle the server on. Cursor reloads the connection without a full restart.
VS Code (native MCP)
{
"servers": {
"reveng-platform": {
"type": "http",
"url": "https://api.reveng.ai/mcp/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Note the top-level key is servers, not mcpServers. Run MCP: List Servers from the Command Palette to confirm the server is connected.
Cline (VS Code / Cursor extension)
{
"mcpServers": {
"reveng-platform": {
"type": "streamableHttp",
"url": "https://api.reveng.ai/mcp/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Cline uses "streamableHttp" rather than "http" for the transport type. Reload the VS Code window after editing.
Other clients
Any client conforming to the MCP specification can connect. The configuration follows the same shape — an HTTP transport pointing at https://api.reveng.ai/mcp/ with an Authorization: Bearer <token> header. Check your client's docs for the exact JSON schema and config-file location.
Available tools
Generated from the live server's /tools.json. Destructive tools mutate platform state and trigger approval prompts in MCP-compliant hosts.
| Tool | Description | |
|---|---|---|
ai_decompile_function |
Gets the AI-powered decompilation for a function. Returns the result immediately if one already exists, reports the current status if a task is in progress, or kicks off an async decompilation task if none exists. Requires write access to start a new task. If no function_id is provided, defaults to the function from the conversation context. | |
decompile_and_wait |
Starts an AI decompilation for a function and waits for completion, returning the final source. Discards any existing result. Charges credits. If the workflow doesn't finish within timeout_seconds (max 600), the tool returns the current progress — call get_ai_decompilation_status to keep polling. | destructive |
edit_function_types |
Edits function type data with surgical precision. Supports renaming/retyping arguments, stack variables, and struct members, as well as updating the function header (name and/or return type). Each edit preserves all other fields. Uses optimistic concurrency control to prevent lost updates. IMPORTANT: You must always confirm the edit with the user before calling this tool — never edit function types without explicit user approval. Requires write access. If no function_id is provided, defaults to the function from the conversation context. | |
generate_pdf_report_and_wait |
Starts a PDF report generation workflow and waits for completion. If the workflow doesn't finish within timeout_seconds (max 600), the tool returns the current progress — call get_pdf_report_status to keep polling. Once COMPLETED the PDF is available from the platform UI. | destructive |
get_ai_decompilation_inline_comments_status |
Returns the current progress of the AI decompilation inline-comments workflow for a function. | |
get_ai_decompilation_status |
Returns the current progress of the AI decompilation workflow for a function. | |
get_ai_decompilation_summary_status |
Returns the current progress of the AI decompilation summary workflow for a function. | |
get_analysis_queue_position |
Returns the queue position for a processing analysis — the number of analyses with a lower analysis_id that are still being processed. | |
get_binary_info |
Retrieves information about a binary. Pass analysis_id, or omit it to use the analysis from the conversation context. Use the 'include' parameter to select which data to return: details (metadata), analyses (list of analyses), strings (extracted strings with optional search/pagination). | |
get_capabilities_for_analysis |
Retrieves capabilities for an analysis. Pass analysis_id, or omit it to use the analysis from the conversation context. Optionally filters by function_id. If no capabilities results exist, automatically triggers a capabilities task. Returns status and a list of capabilities. Capabilities are asynchronous — if the task is still running, call this tool again to check for updated results. Requires write access to trigger a new task. | |
get_collection_by_id |
Retrieves information about a collection by its ID. Use this tool to get details of a specific collection when you have the collection_id available. | |
get_function_history |
Returns the rename history for a function. Each row is a previous name plus when it was changed and by whom. | |
get_function_info |
Retrieves information about a function by its ID or name. Use the 'include' parameter to select which data to return: details, types (effective), types_original (system), types_user (user edits only), types_diff (changes between user and original), disassembly (basic blocks, local variables, params, return type), callees (outgoing calls), callers (incoming calls), ai_decompilation, ai_summary. When looking up by name, the conversation context is used to scope the search. At least function_id or function_name must be provided. | |
get_function_matches_for_analysis |
Retrieves function matching results for an analysis. Pass analysis_id, or omit it to use the analysis from the conversation context. If no matching results exist, automatically triggers a matching task. Returns status, progress (0-100), and a paginated list of matched functions with similarity scores. Function matching is asynchronous — if progress is less than 100, call this tool again to check for updated results. | |
get_function_matches_for_functions |
Retrieves function matching results for specific functions. Pass function_ids (one or more), or omit to use the single function from the conversation context. If no matching results exist, automatically triggers a matching task. Returns status, progress (0-100), and a paginated list of matched functions with similarity scores. Function matching is asynchronous — if progress is less than 100, call this tool again to check for updated results. | |
get_function_summary |
Generates or retrieves an AI-powered summary of what a function does. Requires a successfully completed ai-decompilation for the function first, see ai_decompile_function. If no function_id is provided, defaults to the function from the conversation context. | |
get_pdf_report_status |
Returns the current progress of the PDF report workflow for an analysis. Status is one of UNINITIALISED, PENDING, RUNNING, COMPLETED, FAILED. | |
get_threat_report |
Retrieves the AI threat report for a binary. Pass analysis_id, or omit it to use the analysis from the conversation context. Returns a threat summary, software type classification, MITRE ATT&CK techniques detected with their locations and descriptions, Indicators of Compromise (IOCs), an attack flow summary, and a YARA rule. If no results exist yet, triggers an asynchronous threat report task (requires user confirmation). If the task is still running, call again to poll for results. | |
get_triage_analysis |
Retrieves the triage analysis for the binary at the given analysis_id (or the analysis from the conversation context if omitted). This is the PRIMARY tool for answering questions like 'summarise this binary', 'what does this binary do', 'describe this binary', or 'give me an overview'. Returns a software score (0-10), a natural-language summary of the binary's purpose and behaviour, and a table of key functions with their scores, summaries, and capabilities. If no results exist yet, triggers an asynchronous triage task (requires user confirmation). If the task is still running, call again to poll for results. Note: get_binary_info returns only raw metadata (name, hash, size) — use this tool instead when the user wants to understand what the binary does. | |
list_collection_binaries |
Lists binaries belonging to a collection. Returns a paginated table of analysis IDs and binary names. Supports name search, ordering, and pagination. | |
list_functions |
Lists functions in a binary. Pass analysis_id, or omit it to use the analysis from the conversation context. Returns a paginated table of function IDs, names, virtual addresses, and sizes. Supports name search and pagination. | |
regenerate_ai_decompilation_inline_comments |
Regenerates the AI inline comments for a function's decompilation. Requires an existing decompilation AND summary. Use get_ai_decompilation_inline_comments_status to poll progress. | destructive |
regenerate_ai_decompilation_summary |
Regenerates the AI-generated summary for a function's decompilation. Requires an existing decompilation. Use get_ai_decompilation_summary_status to poll progress. | destructive |
rename_and_verify |
Renames a single function then fetches its history and returns the newly recorded entry as confirmation. Synchronous — no polling needed. | destructive |
rename_functions |
Renames one or more functions in batch. Each rename records history, copies data types and parameters from the source function. IMPORTANT: You must always confirm the renames with the user before calling this tool — never rename functions without explicit user approval. Requires write access. | |
resolve_ids |
Given one of function_id / analysis_id / binary_id, returns the related IDs (analysis_id, binary_id, owner user_id, team_id). If multiple are supplied, the most-specific one wins (function > binary > analysis). Access is checked against the resolved analysis. | |
revert_function_name |
Reverts a function's name to a previously recorded history entry. Use get_function_history first to discover the history_id. | destructive |
start_ai_decompilation |
Forces a fresh AI decompilation, discarding any existing result. Prefer ai_decompile_function for the typical case (returns cached result if present); use this only to regenerate from scratch — e.g. after a rename or to test the bare-C LLM path via force_llm. Charges credits. Poll via get_ai_decompilation_status; read the new result via get_function_info with include=["ai_decompilation"]. | destructive |
start_pdf_report |
Starts a PDF report generation workflow for an analysis. Returns immediately. Use get_pdf_report_status to poll progress; download the rendered PDF from the platform UI once status is COMPLETED. | destructive |