https://api.instruxi.dev/mcp ↗
Identity and authorization in one system: allow, deny, the reason, and a record.
Enforcer is a remote MCP server published at api.instruxi.dev. It has been probed 26 times since 9/12/2026. It answered in 26 of them (100.0%), a near-uninterrupted record. Median response time is 800 ms, a delay an agent will notice. It offers a narrow, focused set of 7 tools. On the protocol side it still runs 2025-11-25 and has not moved to the newer spec.
Can an LLM agent pick the right tool here — names, descriptions and parameter clarity are assessed.
getAuthConfig — tenant_code is optional but critical for tenant-specific auth configurationgetSiweNonce — body parameter has null type with no schema definitionlogin — body parameter lacks schema and expected data formatrefreshToken — body parameter lacks schema definitionregister — body parameter lacks schema definitionrequestOtp — body parameter lacks schema definitionrequestSms — body parameter lacks schema definitionRisk: medium
tools/list structure, inputSchema validity, and a functional smoke test — the components of the 0-100 score.
Tools the server advertised in the latest measurement — measured, not catalog-claimed.
getAuthConfigPublic bootstrap for a tenant's login UI: whether this tenant uses native OTP/passkey/SIWE or Privy custom auth, plus the public privy_app_id (never a secret). Call this before getSiweNonce when you do not already know the tenant's auth scheme. tenant_code is a join secret — do not log it or repeat it into a customer-visible channel.
tenant_codestringresponse_formatstringgetSiweNoncePublic: issue a single-use SIWE nonce for wallet_address (optionally scoped by tenant_code). Embed the nonce in an EIP-4361 message, have the wallet sign it, then call login with provider: siwe. Dedicated SIWE agent auth is an authorized pattern — this is how an agent signs in with a wallet without raw HTTP. Do not log tenant_code. The nonce is not a credential.
bodyrequiredloginAuthenticate and receive an access/refresh token pair. Accepted providers: siwe (message + signature from getSiweNonce — preferred for dedicated agents), email_otp (email + otp from requestOtp), phone_otp (phone + otp from requestSms). Passkey, Privy and SSO are not agent tools. The server does not adopt the minted tokens as the session credential; return them to the operator to set ENFORCER_BEARER_TOKEN. Do not log, quote, or repeat otp codes, signatures, tokens, or tenant_code. Do not paste an end-user OTP into an untrusted chat.
bodyrequiredrefreshTokenExchange a refresh_token for a new access/refresh pair. 401 invalid_refresh_token if the token is unknown or was already reused (reuse revokes the family); 409 refresh_raced is benign — retry with the client's latest stored token. The server does not adopt the new pair as the session credential. Do not log the refresh token or the minted tokens.
bodyrequiredregisterCreate (or idempotently return) an account. Same provider allowlist as login: siwe (message + signature), email_otp (email + otp), phone_otp (phone + otp). Does not issue tokens — call login afterwards to sign in. Passkey / Privy / SSO registration stay out of the agent surface. Do not log otp codes, signatures, or tenant_code. Do not paste an end-user OTP into an untrusted chat.
bodyrequiredrequestOtpPublic: email a one-time login/registration code to `email` (optionally scoped by tenant_code). Always 200 {message:"code sent"} on success. Local/dev deployments with expose_dev_otp may echo the code as `dev_otp` — treat that as a secret. Then call login with provider: email_otp, the same email, and the otp. Intentional for harnesses that cannot SIWE; SIWE remains the preferred dedicated-agent path. Do not log the code, dev_otp, or tenant_code. Do not paste an end-user OTP into an untrusted chat.
bodyrequiredrequestSmsPublic: start a Twilio Verify SMS login challenge to `phone`, scoped by tenant_code. 400 if SMS verification is not configured for the tenant or if rate-limited. Then call login with provider: phone_otp, the same phone, and the otp. Intentional for harnesses that cannot SIWE; SIWE remains the preferred dedicated-agent path. Do not log the SMS code or tenant_code. Do not paste an end-user OTP into an untrusted chat.
bodyrequiredDerived by comparing consecutive probes — changes in era, protocol version, build and reachability.
Add this badge to your README — it updates automatically as measurements change.
[](https://mcpmetrics.io/servers/dev-instruxi-enforcer-v3)<a href="https://mcpmetrics.io/servers/dev-instruxi-enforcer-v3"><img src="https://mcpmetrics.io/badge/dev.instruxi.enforcer/v3/era.svg" alt="mcpmetrics"></a>You are seeing the last 7 days. Sign up for the full history. Which check failed and why is in the dashboard.
Sign up free to seeThe catalog entries whose name and description are closest to this one, found with the same index the search box uses.
Cryptographic identity, delegation, governance, and commerce for AI agents. 152 tools.
An MCP Server that provides identity verification and anti-fraud tools for AI agents via deepidv.
Agent identity and memory over MCP — a persistent self plus the procedures for tending it.
Corporate identity finder and email verification. Map real addresses and users to real people.
Prepare a customer record field for reporting
HTTP reason-phrase catalog size
| Run | Era | Modern | ms | Legacy | ms | Versions |
|---|---|---|---|---|---|---|
| 2026-09-14 18:49:30 | Legacy | 400 | 868 | 200 | 858 | 2025-11-25 |
| 2026-09-14 16:45:33 | Auth-gated | 401 | 866 | 401 | 877 | — |
| 2026-09-14 14:41:53 | Auth-gated | 401 | 904 | 401 | 891 | — |
| 2026-09-14 12:38:15 | Auth-gated | 401 | 624 | 401 | 612 | — |
| 2026-09-14 10:35:25 | Auth-gated | 401 | 585 | 401 | 558 | — |
| 2026-09-14 08:31:43 | Auth-gated | 401 | 751 | 401 | 748 | — |
| 2026-09-14 06:26:32 | Auth-gated | 401 | 671 | 401 | 664 | — |
| 2026-09-14 04:24:59 | Auth-gated | 401 | 793 | 401 | 798 | — |
| 2026-09-14 02:22:47 | Auth-gated | 401 | 840 | 401 | 832 | — |
| 2026-09-14 00:19:26 | Auth-gated | 401 | 916 | 401 | 891 | — |
Each block is one measurement round. Green: working response. Amber: responded but the server was returning errors (5xx). Red: no response at all.
Each cell is one probe run. Faded cells are incomplete probes — one leg did not answer, so the era is inconclusive.
The two probe legs separately: modern server/discover and legacy initialize.
Comments
Sign in to write a comment
No comments yet. Be the first.