Skip to main content
Glama
Cubiczan

governed-mcp-gateway

Cubiczan Agent Platform

실제로 출시하는 에이전트를 위한 신원, 자금, 증거.

세 가지 SKU, 하나의 워크스페이스. MCP 클라이언트는 tools/call과 SSE를 통해 Bearer 프린시펄(principal)을 유지합니다. 지출은 위임장(mandate) 없이는, 그리고 상한 초과 시 인간의 두 번째 키 없이는 결제가 이루어지지 않습니다. Board 청구는 에이전트, CHP 잠금, 그리고 해시된 문서 없이는 봉인(seal)될 수 없습니다.

Three SKUs: governed MCP gateway, spend mandate plane, CFO agent mesh

SKU

포트

저장소

역할

Governed MCP Gateway

:7474

icohangar-ops/governed-mcp-gateway

모든 도구 호출과 SSE 프레임에 프린시펄. 볼트 자격 증명 순환. 도구 허용 목록.

Agent Spend & Mandate Plane

:7475

icohangar-ops/spend-mandate-plane

제안 → 위임 → 부서명 → 결제. 기본은 Stripe; x402는 하나의 레일.

Auditable CFO Agent Mesh

:7476

icohangar-ops/cfo-agent-mesh

청구 → 에이전트 → 잠금 → 문서. ASC 842 / 606 / 718 엔진. HMAC 연결 증거 패키지.

공유 프리미티브(packages/shared): CHP 게이트, HMAC 원장, HTTP/SSE 헬퍼. 런타임 npm 의존성 없음. Stripe와 x402는 레일일 뿐이며, 테스트는 실제 네트워크를 호출하지 않습니다.

빠른 시작

npm install
npm test
npm run gateway   # :7474
npm run spend     # :7475
npm run cfo       # :7476

데모 Bearer 키(.env.example에도 있음):

역할

키

게이트웨이 에이전트

mcp_agt_payops_demo

게이트웨이 휴먼

mcp_human_controller_demo

게이트웨이 리서치(stripe.charge 없음)

mcp_agt_research_demo

지출 에이전트

spend_agt_payops_demo

지출 휴먼

spend_human_controller_demo

CFO 에이전트

cfo_agt_lease_demo

CFO 휴먼

cfo_human_controller_demo

로컬 라이브 API에서 README 카드를 다시 생성합니다:

npm run shots

Related MCP server: identity-aware-mcp-server

1. Governed MCP Gateway

프로덕션 MCP는 신원을 버립니다. listTools는 요청 스레드에서 실행되고, tools/call과 SSE는 다른 곳에서 실행됩니다. 이 게이트웨이는 Bearer 자격 증명을 **프린시펄(Principal)**로 해석하고, 모든 JSON-RPC 호출에 주입하며, 모든 SSE 프레임에 반복합니다. 명명된 볼트 입력은 제자리에서 순환합니다 — github_token은 github_token으로 유지됩니다.

Principal injected on tools/call

SSE repeats principal on every frame

Rotate github_token without a new input id

curl -sS -H "Authorization: Bearer mcp_agt_payops_demo" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"echo.ping","arguments":{"hello":"world"}}}' \
  http://127.0.0.1:7474/mcp

메서드

경로

설명

POST

/mcp

JSON-RPC initialize, tools/list, tools/call

GET

/mcp/sse?once=1

_meta.cubiczan.principal가 포함된 SSE 알림

POST

/v1/credentials/:name/rotate

인간 전용 볼트 순환; 이전 해시는 폐기됨

POST

/v1/credentials/verify

현재 해시에 대해 비밀 값을 확인


2. Agent Spend & Mandate Plane(에이전트 지출 및 위임 계층)

에이전트가 제안합니다. 위임이 승인합니다. 자동 상한선을 초과하는 금액은 인간이 부서명합니다. 제안한 에이전트는 자기 자신을 부서명할 수 없습니다. 정산은 레일입니다: 기본은 Stripe 미터 이벤트, 요청 시 x402 payment-required. 이 MVP에는 체인 호출이 없습니다.

Under-cap proposal auto-locks

Over-cap requires a human second key

Stripe meter vs x402 payment-required

curl -sS -H "Authorization: Bearer spend_agt_payops_demo" \
  -H "Content-Type: application/json" \
  -d '{"agent":"agt_payops","merchant":{"name":"Stripe","url":"https://stripe.com","country":"US"},"total":"12.00","rationale":"tool meter"}' \
  http://127.0.0.1:7475/v1/proposals

메서드

경로

설명

POST

/v1/mandates

운영자가 잔여 센트(remaining-cents) 커버리지를 생성

POST

/v1/proposals

에이전트 제안; 레인 auto | approval | blocked

POST

/v1/countersign

인간의 두 번째 키; 에이전트는 거부됨

POST

/v1/settle

{ "rail": "stripe" } 또는 "x402"


3. Auditable CFO Agent Mesh(감사 가능한 CFO 에이전트 메시)

보드 청구는 에이전트, LOCKED CHP 잠금, 그리고 최소 하나의 소스 문서 해시가 있어야만 봉인(seal)될 수 있습니다. 엔진은 측정합니다(ASC 842 리스 롤포워드, ASC 606 제약 POC, ASC 718 SBC). 사실에 대한 법적 판단을 내리지는 않습니다. 토큰 지출은 동일한 HMAC 연결 원장에 기록됩니다.

Unsealed claim

Evidence pack sealed

ASC 842 rollforward ends at 0.00

curl -sS -H "Authorization: Bearer cfo_agt_lease_demo" \
  -H "Content-Type: application/json" \
  -d '{"title":"AI spend is $12.00 this period","narrative":"Token ledger supports the board claim.","agentId":"agt_lease"}' \
  http://127.0.0.1:7476/v1/claims

메서드

경로

설명

POST

/v1/claims

청구 열기

POST

/v1/claims/:id/documents

문서 첨부; SHA-256 저장

POST

/v1/claims/:id/lock

인간 잠금 → CHP 상태 LOCKED

GET

/v1/evidence/:id

HMAC 체인 증거 패키지 검색

POST

/v1/engines/asc842

리스 분류 + 롤포워드

POST

/v1/engines/asc606

수익 인식 제약 계산

POST

/v1/engines/asc718

주식 보상 비용 계산

스펙

OpenAPI 스펙: openapi.yaml

라이선스

MIT

Available Tools

3 tools
context.inspectA

Read the current session pack and schema token-tax report for the authenticated principal. Returns the bytes→tokens heuristic, session tool names, savedTokens versus the full allowlist, and (unless includeEstate=false) the estate including oversized flags. Does not admit tools and does not execute other tools. Call this before context.need to see what is already loaded. Fail-closed: requires the same principal as the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoOptional session id; defaults to ses_<principalId> when omitted.
includeEstateNoWhen false, omit the full catalog estate and return only session tax. Default true.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses fail-closed authentication requirements, confirms no side effects ('Does not admit tools and does not execute other tools'), and specifies conditional output based on includeEstate. This is strong behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with no filler. The main purpose is front-loaded, followed by return details, exclusions, a direct usage pointer, and the auth requirement. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description explains the return contents, the conditional estate flag, the lack of side effects, and the auth constraint. It is nearly complete; only edge-case error behavior is not described, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some context by tying includeEstate to the estate report and showing how the returned data varies, but it largely restates what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read the current session pack and schema token-tax report.' It also explicitly differentiates itself by saying it 'does not admit tools and does not execute other tools,' and names context.need as the related sibling to compare against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: 'Call this before context.need to see what is already loaded.' It also clarifies what the tool does not do, helping an agent avoid using it for admission or execution. It does not explicitly address echo.ping, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

context.needA

Admit extra tools or a named pack into this session (allow-by-need). Always intersected with the principal allowlist — fail-closed. Research cannot admit stripe.charge. Does not run the admitted tools; call tools/list afterwards to see the new pack, or context.inspect to see tax. sessionId defaults to ses_. Denied names are returned in denied[] and recorded on the ledger.

ParametersJSON Schema
NameRequiredDescriptionDefault
packNoNamed pack to admit (catalog, core, payments, research). Intersected with the allowlist.
toolsNoConcrete tool names to admit (e.g. stripe.charge). Ignored when not allowlisted.
sessionIdNoOptional session id; defaults to ses_<principalId> when omitted.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does so thoroughly: allowlist intersection, fail-closed behavior, the stripe.charge restriction for research, non-execution of admitted tools, denied[] output, ledger recording, and sessionId defaulting are all disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place. The core purpose is front-loaded, followed by restrictions, post-conditions, defaults, and failure behavior, all in a compact, readable form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description explains key return behavior (denied[]) and points to tools/list and context.inspect for further observation. It does not specify the full success response shape, but the essential operational context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the fail-closed intersection, the specific research/stripe.charge restriction, and the denied[]/ledger behavior tied to the tools parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Admit extra tools or a named pack into this session (allow-by-need).' It clearly distinguishes what the tool does from the siblings context.inspect and echo.ping by framing it as an admission action rather than inspection or echo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when extra tools or a pack need to be admitted. It also provides follow-up guidance (tools/list, context.inspect), though it does not explicitly enumerate when not to use it or systematically contrast it with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

echo.pingA

Identity probe. Echoes the call arguments and the authenticated Principal the gateway injected onto this tools/call (id, kind, org). Use it to confirm Bearer identity survived onto the tool worker. Does not hit a network, mutate vault state, or charge. Idempotent except for an audit-ledger append. Not a substitute for context.inspect.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional ping payload echoed back in the result. Omit to send an empty ping.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool does not hit the network, mutate vault state, or charge, and that it is idempotent except for an audit-ledger append. This gives an agent a clear behavioral safety profile without needing structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with purpose, followed by usage guidance, side-effect transparency, and a sibling distinction. Every sentence earns its place and there is no redundant prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool with no output schema, the description is complete: it explains what is echoed, what authentication context is returned, when to use it, and what side effects to expect. An agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one optional parameter, message, and schema description coverage is 100%. The schema already explains that the message is echoed back and that omitting it sends an empty ping, so the description adds little beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Identity probe' and states precisely what the tool does: echoes call arguments and the authenticated Principal. It also distinguishes itself from the sibling context.inspect with the explicit 'Not a substitute for context.inspect' note, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case: 'Use it to confirm Bearer identity survived onto the tool worker.' It also provides a clear when-not-to-use signal by stating it is not a substitute for context.inspect, naming the relevant alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedcontext.inspect
    • First observedcontext.need
    • First observedecho.ping

TDQS

A4.5/5.0

Scored across 3 tools

Disambiguation5/5

context.inspect is read-only session state, context.need is a mutating admission action, and echo.ping is an identity probe. The descriptions explicitly distinguish their purposes, so an agent should not confuse them.

Naming Consistency5/5

All tool names follow a consistent namespace.action pattern: context.inspect, context.need, and echo.ping. Even though the namespaces differ, the lowercase dot-separated verb suffix style is uniform across the set.

Tool Count5/5

Three tools is small but well-scoped for a governance gateway: inspect current state, request admission, and verify identity. Each tool provides a distinct, non-redundant operation that earns its place.

Completeness3/5

The core read and admit operations are covered, and built-in tools/list handles discovery, but there is no way to revoke, release, or reset previously admitted tools or packs. This creates a notable lifecycle gap for an over-admission scenario.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server that authenticates agents via OAuth 2.1 Bearer tokens, validates JWTs with JWKS, enforces tool-level scopes and roles, and logs the full delegation chain.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides a security gateway for AI agents, enforcing allow/confirm/deny policies on tool calls and requiring human approval for risky operations, with full audit logging.
    -