MCP Tool Catalog
APEX capabilities are available to AI agents through the Model Context Protocol (MCP). Every tool in this catalog is a thin wrapper over a standard REST endpoint — the platform rule is REST-first, and MCP adds no capability the REST APIs lack. The OpenAPI specifications remain the authoritative contract: where a tool's input schema and the REST specification disagree, the REST specification wins. If your integration does not specifically need MCP (for example, you are building a service rather than an agent), integrate over REST instead: start with the integration handbook and the OpenAPI specifications.
MCP access is delivered by the APEX Gateway: a single client-side process that exposes tools for the whole suite over standard input/output (stdio) transport. You run the gateway locally inside your agent or development environment; it forwards each tool call as an HTTP request to the hosted REST APIs using your credentials. There is no hosted or remote MCP endpoint — the gateway always runs on your side.
Every tool takes a tenant_id argument identifying your tenant (for example your-tenant). Unless noted otherwise, the gateway resolves it into the {tenant_id} path segment of the backing endpoint, and the credential you configure must be scoped to that tenant. See Tenancy and onboarding.
Setup
The gateway is a Python package supplied during onboarding (installable with pip). Register it with any MCP client that supports stdio servers. If installed as a package, the apex-gateway console command is equivalent to python -m apex_gateway.server.
Sample client configuration, pointed at the hosted development environment:
{
"mcpServers": {
"apex": {
"type": "stdio",
"command": "python",
"args": ["-m", "apex_gateway.server"],
"env": {
"ZENITH_API_URL": "https://zenith.dev.apex.reisiger.org",
"VECTOR_API_URL": "https://vector.dev.apex.reisiger.org",
"ECHO_API_URL": "https://echo.dev.apex.reisiger.org",
"PRISM_API_URL": "https://prism.dev.apex.reisiger.org",
"FORGE_API_URL": "https://forge.dev.apex.reisiger.org",
"PULSE_API_URL": "https://pulse.dev.apex.reisiger.org",
"QUANTUM_API_URL": "http://localhost:9130",
"ZENITH_API_TOKEN": "<zenith-credential-from-onboarding>",
"VECTOR_API_TOKEN": "<vector-credential-from-onboarding>",
"ECHO_API_TOKEN": "<echo-credential-from-onboarding>",
"PRISM_API_TOKEN": "<prism-credential-from-onboarding>",
"FORGE_API_TOKEN": "<forge-credential-from-onboarding>",
"PULSE_API_TOKEN": "<pulse-credential-from-onboarding>",
"QUANTUM_API_TOKEN": "<quantum-credential-from-onboarding>"
}
}
}
}
Notes:
- Base URLs. Each product has its own base URL, set through the
{PRODUCT}_API_URLenvironment variables. The values above are the hosted development environment; see Environments and endpoints. Quantum is not hosted — deployments are local or operator-arranged (defaulthttp://localhost:9130). - Authentication. Each product reads its own
{PRODUCT}_API_TOKENenvironment variable and forwards the value as anAuthorization: Bearerheader on every backing REST call. Credentials are issued during onboarding and are server-side secrets: keep them in the environment of the machine running the gateway, and never embed them in browser or mobile clients. See Authentication. - Document Operations is not routed through the gateway; it is consumed directly over REST (see its section below).
- Calls time out after 60 seconds; errors from the backing REST API are returned to the agent as structured error content rather than protocol failures.
Zenith — knowledge engine
Give an agent grounded access to your indexed corpus: semantic search for evidence, retrieval-augmented answers with citations, knowledge-graph exploration, and the ability to trigger ingestion of registered sources. These tools are the natural starting point for any agent that must answer from your documents rather than from general knowledge.
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
zenith_search |
Full-text and semantic search across indexed data sources | GET /api/v1/{tenant_id}/search |
Available |
zenith_query |
Ask a natural-language question against a tenant's knowledge base | POST /api/v1/{tenant_id}/query |
Available |
zenith_ingest |
Trigger data ingestion from a registered source | POST /api/v1/{tenant_id}/ingest |
Available |
zenith_datasets |
List available datasets and their metadata | GET /api/v1/{tenant_id}/config |
Available |
zenith_graph_atlas |
Read the Knowledge-Graph Atlas for a tenant | GET /api/v1/{tenant_id}/graph/atlas[…] |
Available |
Parameters (* = required):
zenith_search—query(string — Natural language search query),tenant_id(string — Tenant identifier),limit(integer, 1-50, default 10)zenith_query—query(string — Natural-language question (1-2,000 characters)),tenant_id(string),dataset(string — Deprecated alias forquery— kept for callers of the legacy structured-query schema. Ignored whenqueryis set)zenith_ingest—source(string — Registered source adapter identifier),tenant_id(string),config(object),priority(string:low,normal,high, defaultnormal)zenith_datasets—tenant_id* (string)zenith_graph_atlas—tenant_id* (string — Tenant identifier),community_id(string — UUID of the community to expand. Omit for overview),entity_name(string — Exact entity name for a dossier. Omit for overview)
Full REST detail: Zenith specification.
Forge — platform core
Workflow orchestration tools: run a named workflow or a cross-product recipe, then poll its status. The tool contracts are pinned so you can build agent flows against them, but the backing orchestration routes are not served yet — use Forge's REST surface (tenant configuration, API keys, billing and usage) directly in the meantime (Forge specification).
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
forge_run_workflow |
Execute a named workflow from the tenant's workflow library | POST /api/v1/{tenant_id}/workflows/run |
Planned |
forge_run_recipe |
Execute an APEX recipe (cross-product workflow defined in YAML) | POST /api/v1/{tenant_id}/recipes/run |
Planned |
forge_workflow_status |
Check status of a running or completed workflow | GET /api/v1/{tenant_id}/workflows/{run_id} |
Planned |
Planned tools: contract pinned — not yet served.
Parameters (* = required):
forge_run_workflow—workflow(string — Workflow ID or name),tenant_id(string),inputs(object — Input variables for the workflow),async_mode(boolean, default false — If true, returns run ID immediately)forge_run_recipe—recipe(string — Recipe name (resolves to YAML file)),tenant_id(string),inputs(object — Input variables for the recipe)forge_workflow_status—run_id(string — Workflow run ID),tenant_id(string)
Vector — verification and trust
The largest tool set in the suite, built for agent-driven due diligence. The company-graph tools form a loop the agent can run end to end: create a graph for a subject, ingest evidence, review coverage gaps, assert and verify relationships, roll up risk, and export the result. The assessment tools run versioned methodology packs against a target environment and return scored gap registers.
Shared vocabularies: entity types are company, person, project, country, sector, regulator, asset, financial_instrument; relationship types are shareholder_of, director_of, officer_of, subsidiary_of, supplier_to, customer_of, regulated_by, party_to, sanctioned_by, related_party, located_in.
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
vector_investigate |
Run a due diligence investigation on an entity | POST /api/v1/{tenant_id}/investigate |
Planned |
vector_verify |
Verify a specific claim against source documents using natural-language inference | POST /api/v1/{tenant_id}/verify |
Planned |
vector_risk_score |
Get composite risk score for an entity across 6 dimensions | GET /api/v1/{tenant_id}/risk/{entity} |
Planned |
vector_graph_create |
Create a due-diligence company graph for a subject entity | POST /api/v1/{tenant_id}/company-graphs |
Available |
vector_graph_get |
Retrieve a company graph: entities, relationships (each a claim with confidence + evidence counts), and stats | GET /api/v1/{tenant_id}/company-graphs/{graph_id} |
Available |
vector_graph_ingest |
Acquisition run: extract entities/relationships into the graph | POST /api/v1/{tenant_id}/company-graphs/{graph_id}/ingest |
Available |
vector_graph_assert |
Assert a relationship (analyst-entered claim) between two entities | POST /api/v1/{tenant_id}/company-graphs/{graph_id}/relationships |
Available |
vector_graph_verify |
Batch-verify asserted/low-confidence edges through the verification pipeline (bounded, max 25) | POST /api/v1/{tenant_id}/company-graphs/{graph_id}/verify |
Available |
vector_graph_gaps |
Due-diligence coverage report: which dimensions (ownership, control, financial, regulatory, litigation, sanctions, related-party) the graph evidences vs. what is missing | GET /api/v1/{tenant_id}/company-graphs/{graph_id}/gaps |
Available |
vector_graph_risk |
Graph-level risk roll-up: scores key entities and propagates risk along verified edges (confidence-weighted, hop-decayed) to the subject | POST /api/v1/{tenant_id}/company-graphs/{graph_id}/risk |
Available |
vector_graph_export |
Export the full graph (JSON) for reporting or Prism rendering | GET /api/v1/{tenant_id}/company-graphs/{graph_id}/export |
Available |
vector_assess |
Run a methodology pack (e.g. m365-baseline) against a target environment: collects raw observations, evaluates rule + judged controls, returns the coverage report with worst-credible-gap score, certification gate, and gap register | POST /api/v1/{tenant_id}/assessments |
Available |
vector_assessment_get |
Fetch a full assessment report: per-control ladder positions, dimension scores, composite score, certification gate | GET /api/v1/{tenant_id}/assessments/{assessment_id} |
Available |
vector_assessment_gaps |
The severity-sorted gap register of an assessment, filterable by gap class (visibility | control | policy_reality), dimension, or severity | GET /api/v1/{tenant_id}/assessments/{assessment_id}/gaps |
Available |
vector_packs |
List loaded methodology packs: versions, basis (source frameworks), dimensions and control counts | GET /api/v1/{tenant_id}/methodology/packs |
Available |
Planned tools: contract pinned — not yet served. Claim verification, investigations, and entity risk scoring are available today through Vector's REST API (Vector specification); the gateway wrappers for those three ship next.
Parameters (* = required):
vector_investigate—entity(string — Entity name to investigate),tenant_id(string),entity_type(string:company,person,organisation, defaultcompany),depth(string:quick,standard,deep, defaultstandard— Investigation depth — affects cost and time),modules(string array — Specific investigation modules to run. Defaults to all)vector_verify—claim(string — The claim to verify),tenant_id(string),sources(string array — Source document IDs or URLs to check against),threshold(number, default 0.7 — Minimum entailment score to consider verified)vector_risk_score—entity(string),tenant_id(string),dimensions(string array — Risk dimensions to score. Defaults to all)vector_graph_create—subject_name(string — Name of the subject company/person under investigation),tenant_id(string),subject_type(string:company,person,project,country,sector,regulator, defaultcompany),name(string — Optional graph display name)vector_graph_get—graph_id(string),tenant_id(string),entity_type(string:company,person,project,country,sector,regulator,asset,financial_instrument),relationship_type(string:shareholder_of,director_of,officer_of,subsidiary_of,supplier_to,customer_of,regulated_by,party_to,sanctioned_by,related_party,located_in),min_confidence(number, 0-1, default 0),max_hops(integer, 1-6 — Only entities within N hops of the subject)vector_graph_ingest—graph_id(string),tenant_id(string),source(string:zenith,zenith_kg,spectra,registry, defaultzenith),query(string — Search/filter term; defaults to the subject entity name),max_chunks(integer, 1-50, default 10 — zenith source: chunks to extract from),limit(integer, 1-1000, default 200 — Bridge sources: max triples to import),adapter(string:opensanctions, defaultopensanctions— registry source: adapter plugin to run)vector_graph_assert—graph_id(string),relationship_type(string:shareholder_of,director_of,officer_of,subsidiary_of,supplier_to,customer_of,regulated_by,party_to,sanctioned_by,related_party,located_in),claim(string — Natural-language claim this edge asserts),tenant_id(string),source_name(string — Source entity name (e.g. the shareholder/director)),source_type(string:company,person,project,country,sector,regulator,asset,financial_instrument, defaultcompany),target_name(string — Target entity name (e.g. the subject company)),target_type(string:company,person,project,country,sector,regulator,asset,financial_instrument, defaultcompany),source_entity_id(string — Alternative to source_name: existing entity ID),target_entity_id(string — Alternative to target_name: existing entity ID)vector_graph_verify—graph_id(string),tenant_id(string),max_confidence(number, 0-1, default 0.7 — Only verify edges below this confidence),limit(integer, 1-25, default 10),include_verified(boolean, default false)vector_graph_gaps—graph_id(string),tenant_id(string)vector_graph_risk—graph_id(string),tenant_id(string),max_entities(integer, 1-10, default 5),dimensions(string array — Risk dimensions. Defaults to all)vector_graph_export—graph_id(string),tenant_id(string)vector_assess—pack(string — Pack name, e.g. 'm365-baseline'. List via vector_packs),tenant_id(string),target_name(string — Display name of the assessed environment. Defaults to the tenant name),collector(string, defaultmicrosoft_graph— Observation collector to run)vector_assessment_get—assessment_id(string),tenant_id(string),include_observations(boolean, default false — Include the raw ObservationSet snapshot)vector_assessment_gaps—assessment_id(string),tenant_id(string),gap_class(string:visibility,control,policy_reality),dimension(string),severity(string:critical,high,medium,low,info)vector_packs—tenant_id* (string)
Prism — document generation
Rendering for agent outputs: turn structured data into a templated report. The tool contract is pinned but the backing route is not served yet — render today through Prism's REST API (Prism specification).
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
prism_render |
Render a report or visualization from structured data | POST /api/v1/{tenant_id}/render |
Planned |
Planned tools: contract pinned — not yet served.
Parameters (* = required):
prism_render—template(string — Report template name),data(object — Data to render),tenant_id* (string),format(string:html,pdf,markdown,json, defaulthtml)
Echo — communications
Messaging tools for agents: send a notification on a single channel, broadcast across channels, schedule delivery, check delivery status, and list configured channels. The Echo tool set is pinned but its backing routes are not served yet — send and track messages today through Echo's REST API (Echo specification).
Tenancy note: echo_notify, echo_broadcast, and echo_schedule carry tenant_id in the request body rather than the path; echo_status is addressed by notification identifier.
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
echo_notify |
Send a notification through a single channel (email, SMS, WhatsApp, Slack, Teams, webhook) | POST /api/v1/send |
Planned |
echo_broadcast |
Send across multiple channels simultaneously with deduplication | POST /api/v1/broadcast |
Planned |
echo_schedule |
Schedule notification for future delivery (one-time or recurring cron) | POST /api/v1/schedule |
Planned |
echo_status |
Check delivery status of a sent notification | GET /api/v1/status/{notification_id} |
Planned |
echo_channels |
List configured communication channels and their status | GET /api/v1/{tenant_id}/channels |
Planned |
Planned tools: contract pinned — not yet served.
Parameters (* = required):
echo_notify—channel(string:email,sms,whatsapp,slack,teams,push,webhook),recipients(string array, min 1),body(string — Message content (markdown supported)),tenant_id(string),subject(string),template(string),template_data(object),priority(string:low,normal,high,urgent, defaultnormal)echo_broadcast—channels(object array, min 1),body(string),tenant_id* (string),subject(string),priority(string:low,normal,high,urgent, defaultnormal),deduplication(boolean, default true)echo_schedule—channel(string:email,sms,whatsapp,slack,teams,push,webhook),recipients(string array),body(string),tenant_id(string),subject(string),deliver_at(string),recurring(object)echo_status—notification_id(string),tenant_id(string)echo_channels—tenant_id* (string),status(string:active,inactive,all, defaultall)
Document Operations — document toolbox
Document Operations provides conversion, merge, split, extraction, compression, watermarking, redaction, optical character recognition, and twenty-plus further operations through an asynchronous job model. It does not currently expose tools through the APEX Gateway — integrate with it directly over REST (Document Operations specification). Deployment is operator-arranged; local deployments default to http://localhost:9190.
Pulse — intelligence engine
Awareness tools for agents: sentiment analysis, monitoring feeds, and triggered alerts. The tool contracts are pinned but their backing routes are not served yet — Pulse's served surface today (shadow simulations, signals, trends, anomalies, sweeps — itself Preview) is available directly over REST (Pulse specification).
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
pulse_sentiment |
Analyze real-time sentiment for entities, topics, or raw text | POST /api/v1/{tenant_id}/sentiment |
Planned |
pulse_monitor |
List active monitoring feeds — what entities/topics are being tracked | GET /api/v1/{tenant_id}/monitors |
Planned |
pulse_alerts |
Retrieve triggered alerts — sentiment shifts, volume spikes, anomalies | GET /api/v1/{tenant_id}/alerts |
Planned |
pulse_create_monitor |
Create a new monitoring feed | POST /api/v1/{tenant_id}/monitors |
Planned |
Planned tools: contract pinned — not yet served.
Parameters (* = required):
pulse_sentiment—tenant_id* (string),entity(string — Named entity to analyze),topic(string — Topic or theme to analyze),text(string — Raw text to analyze directly),timeframe(string:last_hour,last_24_hours,last_7_days,last_30_days,last_90_days, defaultlast_7_days),sources(string array, default ["all"]),granularity(string:summary,daily,hourly, defaultsummary)pulse_monitor—tenant_id* (string),status(string:active,paused,all, defaultactive),entity(string — Filter to monitors for a specific entity)pulse_alerts—tenant_id* (string),severity(string:critical,warning,informational,all, defaultall),entity(string),since(string),limit(integer, default 20)pulse_create_monitor—name(string),entity(string),tenant_id* (string),keywords(string array),sources(string array),alert_thresholds(object)
Quantum — analytics
Statistical analysis and forecasting over datasets. The tool contracts are pinned but their backing routes are not served yet — Quantum's served surface today (analysis, patterns, prediction; itself Preview, local deployments only) is available directly over REST (Quantum specification).
| Tool | Purpose | Backing REST endpoint | Availability |
|---|---|---|---|
quantum_analyze |
Run statistical analysis on a dataset | POST /api/v1/{tenant_id}/analyze |
Planned |
quantum_forecast |
Generate a time-series forecast for a metric | POST /api/v1/{tenant_id}/forecast |
Planned |
Planned tools: contract pinned — not yet served.
Parameters (* = required):
quantum_analyze—dataset(string — Dataset ID from Zenith),analysis_type(string:correlation,regression,clustering,anomaly,forecast,summary— Type of analysis to run),tenant_id* (string),parameters(object — Analysis-specific parameters)quantum_forecast—metric(string — Metric to forecast),tenant_id(string),horizon(integer, default 30 — Number of periods to forecast),granularity(string:hourly,daily,weekly,monthly, defaultdaily)
Availability legend
| Badge | Meaning |
|---|---|
| Available | Served on the development environment today; contract verified against running code. |
| Preview | Served today, but the surface is still hardening (authentication, schema, or deployment maturity). Expect change; do not build production dependencies without checking with your platform contact. |
| Planned | Contract is pinned and stable to build against, but the endpoint is not yet served. Marked "Contract pinned — not yet served". |
Availability of the backing REST endpoints is tracked operation-by-operation in the OpenAPI specifications as x-apex-availability. When a Planned tool's backing route ships, the badge here moves to Available with no change to the tool contract.