@praxa/mcp-contracts package describes 12 stable tools, while a configured
Integration Gateway executes those tools through a deployment-specific remote
MCP endpoint. Choose the package-only path to build a host adapter; choose the
remote path only when you have that deployment’s URL and OAuth authority.
Prerequisites
- Node.js 20 or later for the package examples;
- an MCP host that supports JSON Schema draft 2020-12 or a reviewed schema adapter;
- for remote execution, a deployment-specific HTTPS
/mcpURL and delegated OAuth flow; - a disposable tenant, token, and input for the first canary.
1. Install and inspect the package
aura_* wire tool names and
aura-agent-os. Do not rename those identifiers in your host.
2. Prove the contract locally
praxa-mcp.test.mjs and run node --test praxa-mcp.test.mjs.
This proves the package bytes and your module loader, not remote execution.
3. Choose an execution path
- Remote MCP server
- Build a host adapter
Obtain the canonical
/mcp URL from your Praxa deployment. Configure it as
a Streamable HTTP server in the host and complete the host’s OAuth flow.
Do not guess the URL from api.praxa.io; the Integration Gateway is
deployment-specific.Start by allowing one safe-read tool such as aura_get_coverage. Keep
mutation tools disabled or approval-required until the negative tests pass.4. Run the first remote canary
- List tools and require the 12 exact
aura_*identifiers. - Confirm the negotiated protocol is
2025-11-25or supported compatibility revision2025-03-26. - Call one safe-read tool with its required scope.
- Repeat without that scope and require a fail-closed authorization result.
- Revoke the disposable token and require the next call to fail.
- Check host and gateway logs for zero token or sensitive-payload leakage.
Troubleshooting
Best practices
- Allowlist only the tools needed for the workflow.
- Require human approval for mutations and always for destructive tools.
- Treat annotations as hints from a trusted contract, not as authorization.
- Persist one idempotency key per logical mutation and reuse it for exact retries.
- Bound tool output before adding it to model context.
- Verify run, trace, event, or receipt independently of the model’s final answer.