Headless 360 turns your Salesforce org into an MCP-callable surface for AI agents. renmy runtime runs the Apex side of that surface offline. Every @InvocableMethod, @AuraEnabled, @RestResource, and Flow you expose as a custom MCP tool runs locally, in under a second per iteration.
Salesforce Headless 360 (announced TDX 2026, GA April 2026) lets admins create MCP servers in Setup that expose Salesforce data and Apex logic to external AI agents like Claude Code, Cursor, and Codex. The standard servers wrap SOQL, DML, and metadata APIs. Custom servers wrap your existing Apex, specifically @InvocableMethod, @AuraEnabled, @RestResource, and autolaunched Flows.
renmy runtime has supported all four of those Apex hooks since day one. The “MCP wrapper” Salesforce adds is metadata configuration, not new Apex code. Your Headless 360 custom MCP servers are testable in renmy runtime today, with no additional setup.
On top of that, renmy runtime itself ships an MCP server (renmy mcp) that registers alongside the Salesforce DX MCP server. Agents call both: live-org tools through Salesforce, local test execution through renmy runtime.
A custom MCP server in Salesforce is configured in Setup → Integration → Salesforce MCP Servers. The configuration is no-code; the actual tools exposed by the server are existing Apex artifacts:
| Apex hook | Becomes an MCP tool of |
|---|---|
@InvocableMethod | Invocable actions exposed as MCP tools |
@AuraEnabled | Apex methods callable from MCP clients |
@RestResource | Custom Apex REST endpoints mapped as tools |
Autolaunched Flow | Flows exposed as MCP tools |
renmy runtime executes every one of these constructs in its embedded interpreter against an embedded PostgreSQL, with the same fidelity it gives any other Apex code. There is no separate “MCP test mode” to enable.
// Custom MCP tool: an @InvocableMethod
public class WeatherLookup {
public class Input {
@InvocableVariable(required=true)
public String city;
}
public class Output {
@InvocableVariable
public Decimal tempF;
}
@InvocableMethod(label='Lookup Weather')
public static List<Output> run(List<Input> inputs) {
Output o = new Output();
o.tempF = 72;
return new List<Output>{ o };
}
}
// Local test — runs in renmy runtime the same as
// any other invocable. The MCP wrapper is metadata
// the runtime never has to know about.
@isTest
private class WeatherLookupTest {
@isTest static void returnsValueForCity() {
WeatherLookup.Input i = new WeatherLookup.Input();
i.city = 'Berlin';
List<WeatherLookup.Output> out = WeatherLookup.run(
new List<WeatherLookup.Input>{ i }
);
System.assertEquals(72, out[0].tempF);
}
}renmy mcp exposes the local test runner to AI agents over standard Model Context Protocol stdio. Agents register renmy next to the Salesforce DX MCP server and get fast, structured access to local execution alongside live-org tools.
Three of its tools carry the test loop:
run_apex_tests runs tests by class, method, pattern, or path. Returns pass/fail counts, failure objects with file/line, and total duration. Optional timeout_seconds and max_failures bound runtime and payload size.get_coverage returns per-class line coverage from the most recent run.list_test_classes lists every @isTest class in the project without a database hit.# Register renmy with Claude Code, under the
# name nimbus that renmy mcp install also writes
claude mcp add nimbus -- renmy mcp
# An agent's typical loop:
# 1. read code
# 2. call run_apex_tests("MyTest.testCase")
# 3. read JSON failure: {file, line, error}
# 4. edit
# 5. call run_apex_tests again
# Round trip: under a second per iteration.Headless 360 ships eight standard MCP servers out of the box. Each wraps platform APIs that renmy runtime already simulates locally (SOQL queries, DML, metadata describes, custom metadata access). Tests that exercise code paths these servers reach through still run against the embedded database with no extra wiring.
| Server | Wraps |
|---|---|
sobject-reads | SOQL queries, record describes, read-only access |
sobject-mutations | Create and update operations on standard and custom objects |
sobject-deletes | Delete operations on standard and custom objects |
sobject-all | Full CRUD plus query and search |
data-cloud-queries | Data Cloud unified SQL queries |
metadata-experts | Metadata API tools for describing and editing org config |
salesforce-api-context | REST API Catalog tools |
engagement-interaction | Marketing/Slack engagement tools |
Headless 360 today is a one-way surface: external agents call into Salesforce. There is no equivalent for Apex code to call out to an MCP server, so there is nothing for renmy runtime to simulate on that side. If Salesforce adds an Apex-side client API in a future release, renmy runtime will follow with mocking and recording support modelled on its existing HTTP-callout infrastructure.
If you have a Salesforce project with custom @InvocableMethod or @RestResource classes (whether or not you have wrapped them as MCP tools yet), renmy runtime will run their tests in under a second.
# Install (macOS / Linux)
curl -fsSL https://install.renmy.net | sh
# Windows — works in any shell
powershell -c "irm https://install.renmy.net/win | iex"
# From your Salesforce project root
renmy init
renmy test
# Hand the local runner to your AI agent
claude mcp add nimbus -- renmy mcpSee also: AI & Agentic Coding · renmy mcp reference