Enterprise Scenario: Governing Meridian's AI Estate
A complete, worked walkthrough — follow a fictional enterprise (Meridian, Inc.) as it inventories, governs, secures and audits every AI agent, MCP server, model and tool with AuthSpoke.
The best way to understand AuthSpoke is to watch an enterprise adopt it end to end. This walkthrough follows a fictional company — Meridian, Inc. — from an empty account to a fully governed AI estate, touching every capability of the Enterprise AI Control Plane along the way.
Every step is a real, runnable API call, followed by what you'll see in the console. Set TOKEN once (Step 1) and reuse it throughout.
Where calls go. Registration is a one-time call to the apex
https://authspoke.com. It returns a tenant URL — atrial-######.authspoke.comsubdomain that Meridian branded tohttps://meridian.authspoke.com. Every tenant-scoped call below uses that tenant URL; headless automation can use the stable hosthttps://api.authspoke.comwith/api/v1/...routes.
The situation#
Meridian, Inc. has quietly accumulated AI across the business: a customer-support copilot touching live customer data, a code-review bot with internet access that can spawn sub-agents, a sales forecaster wired into Salesforce — and, inevitably, shadow AI nobody registered. The security team has no inventory, no policy, and no way to stop a misbehaving agent. They adopt AuthSpoke. Here's what their platform team does.
Step 1 — Provision & authenticate#
Register the tenant and its first admin. Self-service registration creates the account and its SUPER admin.
curl -X POST "https://authspoke.com/api/v1/register" \
-H "Content-Type: application/json" \
-d '{
"username": "meridian-admin",
"password": "S3cur3-Pass!",
"email": "[email protected]",
"firstName": "Meridian",
"lastName": "Platform",
"country": "US",
"state": "CA"
}'
Registration returns Meridian's tenant URL — initially a random trial-######.authspoke.com subdomain. Meridian branded it to a custom domain, meridian.authspoke.com, and uses that host for everything from here on.
Sign in and capture a token:
export TOKEN=$(curl -s -X POST "https://meridian.authspoke.com/api/v1/auth/signin" \
-H "Content-Type: application/json" \
-d '{"username":"meridian-admin","password":"S3cur3-Pass!"}' | jq -r .token)
Headless clients such as agents, MCP servers, CI jobs, and SDKs call the same APIs with a bearer token issued by AuthSpoke. Tenant context is carried by the token/session, so clients do not place tenant ids or subdomains in API paths. Use https://api.authspoke.com/api/v1/... for machine-to-machine calls, or Meridian's tenant host when you want browser-aligned behavior.
Signing in to the console lands you on AI Overview — Meridian's Mission Control. With an empty estate it reads HEALTHY with a perfect trust score. Time to fill it in.
Step 2 — Inventory the agents#
You cannot govern what you cannot see. Register what you know about. AuthSpoke computes risk and trust for each agent automatically — you never set the scores yourself.
# High blast radius: production + sensitive customer data
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/agents" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"support-copilot","owner":"[email protected]",
"businessUnit":"Customer Support","department":"CX",
"modelProvider":"Anthropic","modelVersion":"claude-opus-4",
"environment":"PRODUCTION","authMethod":"OAUTH","lifecycleState":"REGISTERED",
"businessCriticality":"CRITICAL",
"productionAccess":true,"sensitiveDataAccess":true,
"connectedSystems":4,"connectedMcpCount":2,"complianceTags":"PII,GDPR"
}'
# Engineering agent: internet + external tools + can spawn agents
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/agents" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"code-review-bot","owner":"[email protected]",
"businessUnit":"Engineering","modelProvider":"OpenAI","modelVersion":"gpt-4o",
"environment":"PRODUCTION","authMethod":"API_KEY","lifecycleState":"REGISTERED",
"businessCriticality":"HIGH",
"internetAccess":true,"externalToolUsage":true,"canInvokeAgents":true,
"connectedSystems":3,"connectedMcpCount":1
}'
# Revenue agent wired into Salesforce
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/agents" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"sales-forecaster","owner":"[email protected]",
"businessUnit":"Revenue","modelProvider":"Anthropic","modelVersion":"claude-sonnet-4",
"environment":"PRODUCTION","authMethod":"OAUTH","lifecycleState":"APPROVED",
"businessCriticality":"MEDIUM","productionAccess":true,"connectedMcpCount":1
}'
# Low-risk internal assistant
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/agents" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"hr-onboarding-assistant","owner":"[email protected]",
"businessUnit":"People","modelProvider":"Anthropic","modelVersion":"claude-haiku-4",
"environment":"DEVELOPMENT","authMethod":"MTLS","lifecycleState":"APPROVED",
"businessCriticality":"LOW"
}'
Open Enterprise AI → Agents. Each agent appears with a computed risk and trust score. Notice the asymmetry: support-copilot scores high risk (production access, sensitive data, high criticality, several connected systems), while hr-onboarding-assistant scores low risk, high trust (strong mTLS auth, approved, minimal exposure). Risk is a transparent function of blast radius — see Risk & Trust. Click any agent to open the investigation panel with Overview, Relationships, Timeline and Security tabs.
Step 3 — Register the MCP servers#
Agents reach tools through MCP servers. Inventory them and leave untrusted ones PENDING so they surface for review.
# Trusted, approved
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/mcp-servers" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"salesforce-mcp","owner":"[email protected]",
"endpointUrl":"https://mcp.meridian.example/salesforce","authMethod":"OAUTH",
"environment":"PRODUCTION","exposedTools":"query_opportunities, update_account",
"trustLevel":"VERIFIED","securityClassification":"CONFIDENTIAL",
"approvalStatus":"APPROVED","healthStatus":"HEALTHY"
}'
# Internal, RESTRICTED, awaiting review
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/mcp-servers" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"internal-data-lake-mcp","owner":"[email protected]",
"endpointUrl":"https://mcp.meridian.example/lake","authMethod":"MTLS",
"environment":"PRODUCTION","exposedTools":"run_query, export_dataset",
"trustLevel":"INTERNAL","securityClassification":"RESTRICTED",
"approvalStatus":"PENDING"
}'
In Enterprise AI → MCP Registry both servers appear; the pending one also shows up in Discovery, ready to approve or reject.
Step 4 — Establish AI identities & ownership#
Every agent becomes a first-class AI identity — the thing that authenticates and carries trust.
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/identities" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"svc-support-copilot","identityType":"SERVICE","authMethod":"OAUTH",
"owner":"[email protected]","lifecycleState":"ACTIVE"
}'
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/identities" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"wl-code-review-bot","identityType":"WORKLOAD","authMethod":"MTLS",
"owner":"[email protected]","federated":true,
"oidcSubject":"spiffe://meridian.example/ns/ci/sa/code-review"
}'
Enterprise AI → Identities now lists each AI workload alongside its type, auth method and owner — AI treated as an enterprise identity, in the same fabric as your people and services.
Step 5 — Inventory models & catalog tools#
Track every model in use, and flag any that violate policy:
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/models" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"claude-opus-4","provider":"Anthropic","version":"4","hostingType":"CLOUD","dataResidency":"US","status":"APPROVED","riskLevel":"LOW","complianceTags":"SOC2"}'
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/models" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"gpt-4o","provider":"OpenAI","hostingType":"CLOUD","dataResidency":"US","status":"APPROVED","riskLevel":"MEDIUM"}'
# A model that violates data-residency policy
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/models" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"example-restricted-model","provider":"ExampleAI","hostingType":"CLOUD","dataResidency":"CN","status":"BLOCKED","riskLevel":"HIGH","complianceTags":"DATA_RESIDENCY"}'
Catalog the tools agents can invoke — especially the dangerous ones:
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/tools" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"execute_sql","toolType":"CODE_EXEC","owner":"[email protected]","exposedBy":"internal-data-lake-mcp","riskLevel":"HIGH","status":"PENDING"}'
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/tools" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"web_search","toolType":"RETRIEVAL","owner":"[email protected]","riskLevel":"LOW","status":"APPROVED"}'
Enterprise AI → Models flags the blocked model; Enterprise AI → Tools shows execute_sql as HIGH risk. Both are now governed and attributable.
Step 6 - Import provider agents into the AI Registry#
Meridian connects Amazon Bedrock through the Enterprise Connector Framework. The connector manifest drives configuration, test connection, preview, and import. For Bedrock, the import is scoped to Bedrock agents Meridian created; foundation-model catalog entries are not imported as governed AI assets.
curl -s "https://api.authspoke.com/api/v1/connectors/aws-bedrock/manifest" \
-H "Authorization: Bearer $TOKEN" | jq
INSTANCE=$(curl -s -X POST "https://api.authspoke.com/api/v1/connector-instances" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"connectorKey":"aws-bedrock",
"displayName":"Meridian AWS Bedrock",
"environment":"PRODUCTION",
"configuration":{"region":"us-east-1","discoveryMode":"agents-only"}
}')
IID=$(echo "$INSTANCE" | jq -r .id)
curl -s -X POST "https://api.authspoke.com/api/v1/connector-instances/$IID/test" \
-H "Authorization: Bearer $TOKEN"
IMPORT=$(curl -s -X POST "https://api.authspoke.com/api/v1/integrations/$IID/imports" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"scope":"BEDROCK_AGENTS","mode":"PREVIEW"}')
IMPORT_ID=$(echo "$IMPORT" | jq -r .id)
curl -s "https://api.authspoke.com/api/v1/integrations/$IID/imports/$IMPORT_ID/preview" \
-H "Authorization: Bearer $TOKEN" | jq
curl -s -X POST "https://api.authspoke.com/api/v1/integrations/$IID/imports/$IMPORT_ID/confirm" \
-H "Authorization: Bearer $TOKEN"
Imported agents now appear in the governed registry:
curl -s "https://api.authspoke.com/api/v1/ai-assets?provider=AWS_BEDROCK&assetType=AGENT" \
-H "Authorization: Bearer $TOKEN" | jq
In the console, AI Registry shows each Bedrock agent with owner, lifecycle, governance state, metadata, relationships, activity, and source connector context.
Step 7 - Run governance evaluations and review findings#
Meridian turns policy into reviewable governance findings. Evaluation runs are headless, so a scheduled job, MCP server, or CI workflow can run the same call as the UI.
curl -s -X POST "https://api.authspoke.com/api/v1/ai-governance/policies" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"name":"Production AI assets require owners",
"status":"ACTIVE",
"severity":"HIGH",
"scope":"PRODUCTION_ASSETS",
"rule":{"requiredFields":["owner","businessUnit","lifecycleState"]}
}'
RUN=$(curl -s -X POST "https://api.authspoke.com/api/v1/ai-governance/evaluations/run" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"scope":"ALL_ASSETS","reason":"Initial Meridian governance baseline"}')
RUN_ID=$(echo "$RUN" | jq -r .id)
curl -s "https://api.authspoke.com/api/v1/ai-governance/evaluations/runs/$RUN_ID" \
-H "Authorization: Bearer $TOKEN" | jq
curl -s "https://api.authspoke.com/api/v1/ai-governance/findings?status=OPEN" \
-H "Authorization: Bearer $TOKEN" | jq
A reviewer can accept risk, request remediation, or create an exemption without leaving the audit trail:
curl -s -X POST "https://api.authspoke.com/api/v1/ai-governance/findings/$FINDING_ID/review-actions" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"action":"REQUEST_REMEDIATION","comment":"Assign an owner and complete production approval before launch."}'
The governance dashboard now shows active findings, review status, exemptions, and remediation tasks for the imported agent estate.
Step 8 - Sessions & incident response#
A session is a live, observable, instantly revocable run of an agent. Suppose one starts behaving oddly — you can contain it in one call.
SESSION=$(curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/sessions" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"agentName":"code-review-bot","status":"ACTIVE","toolCallsInFlight":7,"mcpConnections":2,"clientIp":"203.0.113.9"}')
SID=$(echo "$SESSION" | jq -r .sessionId)
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/sessions/$SID/terminate" -H "Authorization: Bearer $TOKEN"
In Enterprise AI → Sessions the session shows its in-flight tool calls and MCP connections; clicking Terminate flips it to TERMINATED and drops those counters to zero. To stop all AI at once with no redeploy, use a fleet-wide Kill Switch.
Step 9 - Prove compliance#
Map AI activity to the frameworks your auditors care about, then read the posture:
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/compliance" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"framework":"EU_AI_ACT","controlRef":"Art.14","title":"Human oversight","status":"COMPLIANT","owner":"[email protected]","evidence":"Every session is terminable and every action is audited."}'
curl -s -X POST "https://meridian.authspoke.com/api/v1/ai/compliance" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"framework":"NIST_AI_RMF","controlRef":"GOVERN-1.1","title":"AI inventory maintained","status":"COMPLIANT","owner":"[email protected]"}'
curl -s "https://meridian.authspoke.com/api/v1/ai/compliance/posture" -H "Authorization: Bearer $TOKEN" | jq
Enterprise AI → Compliance shows a posture ring and a per-framework breakdown — the view Meridian hands its auditors.
Step 10 - See the whole estate#
Everything Meridian did is now observable in one place.
# Mission Control snapshot
curl -s "https://meridian.authspoke.com/api/v1/ai/overview" -H "Authorization: Bearer $TOKEN" | jq
# The activity stream — every action, newest first
curl -s "https://meridian.authspoke.com/api/v1/ai/activity" -H "Authorization: Bearer $TOKEN" | jq '.[] | {eventType, subjectName, severity}'
Across the console:
- AI Overview — enterprise status, trust ring, risk distribution, and a live activity feed of everything above.
- Relationships — a graph of owners → agents → models / MCP → data exposure. Hover an agent to light up its blast radius.
- Risk Center — agents bucketed into high / medium / low with recommendations.
- Audit — the full, immutable event trail behind every compliance claim.
What Meridian achieved#
In ten steps, Meridian went from "we have no idea what AI is running" to a fully governed estate: a complete inventory of agents, MCP servers, models and tools; every AI workload as a first-class identity; explainable policies; instant session containment; live risk scoring; and an audit trail mapped to EU AI Act and NIST AI RMF controls.
Next#
- Deep-dive the concepts: AI Agents · MCP Registry · AI Policies · Risk & Trust
- Build it yourself: Provision & Authenticate → Build an AI Agent
- Understand the design: Enterprise AI Control Plane