Skip to content

Commit 9136344

Browse files
committed
Update project positioning
1 parent dcdba19 commit 9136344

9 files changed

Lines changed: 105 additions & 82 deletions

File tree

README.md

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# AgentID
22

3-
**AgentID** is a lightweight open-source toolkit for declaring, validating, reviewing, and auditing AI agent authority.
3+
**AgentID** is an open-source authorization layer for AI agent tool calls.
44

5-
The primary use case is an enterprise-owned authorization boundary for agent
6-
tool calls across internal systems, SaaS APIs, MCP servers, cloud control
7-
planes, databases, and provider-hosted tools.
5+
It helps teams declare, validate, and enforce what agents are allowed to do
6+
across SaaS apps, internal systems, cloud control planes, databases,
7+
provider-hosted tools, and MCP gateways.
88

99
![AI Agents Need Eligibility Contracts](docs/AIAgentsNeedEligibilityContracts.png)
1010

1111
The core idea is simple:
1212

1313
> Every production agent should have an authority contract that says who it is, who owns it, what it can request, when authority should be issued just in time, where data can flow, when it needs approval, and how it can be stopped.
1414
15-
AgentID does **not** replace IAM, OAuth, MCP gateways, OPA, Cedar, or enterprise security tools. It sits one layer above them as a portable declaration format for agent identity, delegation, tool access, intent confirmation, just-in-time authorization, data-flow boundaries, approval rules, runtime enforcement expectations, audit behavior, and kill-switch behavior.
15+
AgentID does **not** replace IAM, OAuth, MCP gateways, OPA, Cedar, or enterprise security tools. It sits one layer above them as a portable authorization contract for agent identity, delegation, tool access, intent confirmation, just-in-time authorization, data-flow boundaries, approval rules, runtime enforcement expectations, audit behavior, and kill-switch behavior.
1616

1717
For gateway deployments, AgentID is meant to run at an enterprise-controlled
1818
boundary:
1919

2020
```text
21-
Enterprise Agent -> Enterprise Gateway -> AgentID Check -> Internal or External Tool
21+
Enterprise Agent -> Enterprise Gateway or App Runtime -> AgentID Check -> Internal, SaaS, or MCP Tool
2222
```
2323

2424
---
@@ -49,10 +49,10 @@ For scoped agent-to-agent delegation, see [`docs/agent-to-agent-delegation.md`](
4949

5050
## Why this exists
5151

52-
Most agent projects define tools and credentials in ad hoc config files.
53-
MCP servers and tool APIs make this sharper: an enterprise agent can suddenly
54-
call internal systems, SaaS APIs, cloud control planes, databases, or provider
55-
tools unless there is a local policy checkpoint.
52+
Most agent projects define tools and credentials in ad hoc config files. As
53+
agents move into production, those tools span internal services, SaaS APIs, MCP
54+
servers, cloud control planes, databases, and provider-hosted capabilities.
55+
AgentID gives teams a local policy checkpoint before those calls execute.
5656

5757
What is often missing is a clear answer to:
5858

@@ -130,14 +130,14 @@ the tool.
130130
## CLI
131131

132132
```bash
133-
agentid validate examples/customer-support-refund-agent.yaml
134-
agentid explain examples/customer-support-refund-agent.yaml
135-
agentid risk-score examples/customer-support-refund-agent.yaml
136-
agentid generate-policy examples/customer-support-refund-agent.yaml --target opa
133+
agentid validate examples/provider-mcp-support-agent.yaml
134+
agentid explain examples/provider-mcp-support-agent.yaml
135+
agentid risk-score examples/provider-mcp-support-agent.yaml
136+
agentid generate-policy examples/provider-mcp-support-agent.yaml --target opa
137137
agentid audit examples/sample-tool-log.json --manifest examples/customer-support-refund-agent.yaml
138138
agentid schema > schema/agentid.schema.json
139139
agentid config-ui --output agentid-policy-builder.html
140-
agentid gateway examples/customer-support-refund-agent.yaml --host 127.0.0.1 --port 8787
140+
agentid gateway examples/provider-mcp-support-agent.yaml --host 127.0.0.1 --port 8787
141141
```
142142

143143
`config-ui` writes a self-contained browser UI for building an AgentID manifest and starter OPA policy.
@@ -166,7 +166,7 @@ jobs:
166166
max-risk: "75"
167167
```
168168
169-
For SaaS runtime integration, see the TypeScript helper in
169+
For application and gateway runtime integration, see the TypeScript helper in
170170
[`sdk/typescript/`](sdk/typescript/). It provides `authorizeToolCall`,
171171
`requestJitGrant`, and `assertAllowed` wrappers for the gateway API.
172172
For architecture guidance, see
@@ -175,7 +175,8 @@ For MCP server calls, including internal and provider-hosted servers, see
175175
[`docs/mcp-gateway-integration.md`](docs/mcp-gateway-integration.md).
176176
For a reference adapter, see [`mcp-gateway-adapter/`](mcp-gateway-adapter/).
177177

178-
`gateway` starts a lightweight HTTP authorization gateway for SaaS integration. The gateway exposes:
178+
`gateway` starts a lightweight HTTP authorization gateway for agent tool-call
179+
integration. The gateway exposes:
179180

180181
| Endpoint | Purpose |
181182
|---|---|
@@ -220,25 +221,25 @@ for the enterprise gateway pattern.
220221

221222
The hosted gateway-control demo is available at
222223
[`agentid-refund-demo.drisw.workers.dev`](https://agentid-refund-demo.drisw.workers.dev/).
223-
It shows a SaaS support app consulting AgentID before refund actions, including
224-
customer refund-history checks, human notification for escalations, and JIT
225-
authority before Stripe refund execution. It also includes a visible MCP
226-
gateway flow that filters provider tools, allows a declared CRM read, denies a
227-
CRM write without JIT, and then allows the write after a scoped grant. The demo
228-
Worker mints a short-lived OIDC-style JWT server-side, and the gateway validates
229-
its claims against the tenant manifest. Demo source lives in [`demo/`](demo/).
224+
It shows the broader AgentID model in two concrete flows: a SaaS support app
225+
consulting AgentID before refund actions, and an MCP gateway checking provider
226+
CRM tool calls before forwarding them. The MCP flow filters provider tools,
227+
allows a declared CRM read, denies a CRM write without JIT, and then allows the
228+
write after a scoped grant. The demo Worker mints a short-lived OIDC-style JWT
229+
server-side, and the gateway validates its claims against the tenant manifest.
230+
Demo source lives in [`demo/`](demo/).
230231

231-
![AgentID Refund Control Demo](docs/AgentIDRefundControlDemo.png)
232+
![AgentID Gateway Control Demo](docs/AgentIDRefundControlDemo.png)
232233

233234
```mermaid
234235
sequenceDiagram
235236
participant User
236-
participant App as SaaS App / Agent Runtime
237+
participant App as App / Agent Runtime / MCP Gateway
237238
participant IdP as Customer IdP
238239
participant Gateway as AgentID Gateway
239240
participant KV as Tenant Manifest Store
240241
participant DO as JIT Grant Store
241-
participant Tool as SaaS Tool
242+
participant Tool as Downstream Tool
242243
243244
User->>App: Run agent workflow
244245
App->>IdP: Obtain OIDC/OAuth access token
@@ -321,7 +322,7 @@ Implemented:
321322
- Reference MCP gateway adapter for `tools/list` and `tools/call`
322323
- MCP gateway adapter demo with mock provider server
323324
- MCP gateway integration guide and enterprise/provider MCP example manifest
324-
- Hosted refund-control demo
325+
- Hosted gateway-control demo with SaaS and MCP flows
325326
- CI checks for tests, schema validation, manifest risk, and TypeScript SDK
326327

327328
Next:

action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: AgentID Manifest Check
2-
description: Validate AgentID manifests and optionally fail above a risk threshold.
2+
description: Validate AgentID agent tool-call authorization manifests and optionally fail above a risk threshold.
33
inputs:
44
manifests:
55
description: Space-separated manifest paths or glob patterns.

cloudflare/README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# AgentID Cloudflare Gateway
22

3-
This Worker exposes the AgentID gateway API on Cloudflare Workers:
3+
This Worker exposes the AgentID gateway API on Cloudflare Workers. It can sit
4+
behind a SaaS app, internal agent platform, or MCP gateway and return
5+
allow/deny/JIT decisions before tool execution:
46

57
| Endpoint | Purpose |
68
|---|---|
@@ -57,8 +59,9 @@ RS256 JWT signatures against the matching JWKS `kid`, then enforces issuer,
5759
audience, tenant, agent, and scope checks from the manifest.
5860

5961
For a single-tenant deployment, set `AGENTID_MANIFEST_JSON` as a Worker variable.
60-
For SaaS multi-tenancy, bind a KV namespace named `AGENTID_MANIFESTS` and store
61-
each tenant manifest as JSON under the tenant ID used in `/tenants/<tenant-id>/...`.
62+
For multi-tenant SaaS, internal platform, or MCP gateway deployments, bind a KV
63+
namespace named `AGENTID_MANIFESTS` and store each tenant or environment
64+
manifest as JSON under the ID used in `/tenants/<tenant-id>/...`.
6265

6366
## GitHub Actions
6467

demo/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# AgentID Gateway Control Demo
22

3-
This Cloudflare Worker hosts a small SaaS runtime demo that calls the live
4-
AgentID gateway through a Cloudflare Service Binding. The browser never sees the
5-
gateway bearer token. For the self-contained demo, the Worker mints a short-lived
6-
HS256-signed OIDC-style JWT and the gateway validates it against the tenant
7-
manifest.
3+
This Cloudflare Worker hosts a small gateway-control demo that calls the live
4+
AgentID gateway through a Cloudflare Service Binding. It shows AgentID
5+
authorizing both a SaaS refund workflow and an MCP provider-tool workflow before
6+
tool execution. The browser never sees the gateway bearer token. For the
7+
self-contained demo, the Worker mints a short-lived HS256-signed OIDC-style JWT
8+
and the gateway validates it against the tenant manifest.
89

910
Live demo:
1011

demo/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "agentid-refund-demo",
2+
"name": "agentid-gateway-control-demo",
33
"private": true,
44
"type": "module",
55
"scripts": {

docs/getting-started.md

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Getting Started with AgentID
22

3-
This walkthrough shows how to use AgentID as an authority contract for an AI
4-
agent and how to put checks in front of tool execution.
3+
This walkthrough shows how to use AgentID as an authorization contract for AI
4+
agent tool calls across app runtimes, internal systems, SaaS APIs, and MCP
5+
gateways.
56

67
## 1. Install
78

@@ -13,12 +14,12 @@ python -m pip install -e ".[dev]"
1314

1415
## 2. Validate a Manifest
1516

16-
Start with the included ecommerce-style support/refund manifest:
17+
Start with the included provider MCP support manifest:
1718

1819
```bash
19-
agentid validate examples/customer-support-refund-agent.yaml
20-
agentid explain examples/customer-support-refund-agent.yaml
21-
agentid risk-score examples/customer-support-refund-agent.yaml
20+
agentid validate examples/provider-mcp-support-agent.yaml
21+
agentid explain examples/provider-mcp-support-agent.yaml
22+
agentid risk-score examples/provider-mcp-support-agent.yaml
2223
```
2324

2425
The manifest declares:
@@ -49,7 +50,7 @@ $schema: https://raw.githubusercontent.com/dinpd/AgentID/main/schema/agentid.sch
4950
Generate starter OPA/Rego policy from a manifest:
5051
5152
```bash
52-
agentid generate-policy examples/customer-support-refund-agent.yaml --target opa
53+
agentid generate-policy examples/provider-mcp-support-agent.yaml --target opa
5354
```
5455

5556
The manifest remains the portable source of truth. OPA is one target runtime
@@ -73,7 +74,7 @@ requests.
7374
## 6. Run the Gateway Locally
7475

7576
```bash
76-
agentid gateway examples/customer-support-refund-agent.yaml --host 127.0.0.1 --port 8787
77+
agentid gateway examples/provider-mcp-support-agent.yaml --host 127.0.0.1 --port 8787
7778
```
7879

7980
Then authorize a tool call:
@@ -82,11 +83,15 @@ Then authorize a tool call:
8283
curl -s http://127.0.0.1:8787/authorize \
8384
-H 'content-type: application/json' \
8485
-d '{
85-
"agent_id": "customer-support-refund-agent",
86-
"tool": "zendesk.search_tickets",
86+
"agent_id": "enterprise-support-agent",
87+
"job_id": "support_case_resolution",
88+
"case_id": "case-1042",
89+
"customer_id": "cus_123",
90+
"tool": "provider.crm.search_customer",
8791
"action": "read",
88-
"data_from": "zendesk",
89-
"data_to": "stripe"
92+
"resource": "provider/customer/cus_123",
93+
"data_from": "provider_crm",
94+
"data_to": "agent_context"
9095
}'
9196
```
9297

@@ -129,10 +134,14 @@ const agentid = new AgentIdClient({
129134
});
130135
131136
await agentid.assertAllowed("tenant-a", {
132-
agent_id: "refund-agent",
133-
tool: "zendesk.search_tickets",
137+
agent_id: "enterprise-support-agent",
138+
job_id: "support_case_resolution",
139+
case_id: "case-1042",
140+
customer_id: "cus_123",
141+
tool: "provider.crm.search_customer",
134142
action: "read",
135-
data_from: "zendesk",
143+
resource: "provider/customer/cus_123",
144+
data_from: "provider_crm",
136145
data_to: "agent_context",
137146
});
138147
```
@@ -141,18 +150,24 @@ For sensitive actions, request a JIT grant before executing the tool:
141150

142151
```ts
143152
const grant = await agentid.requestJitGrant("tenant-a", {
144-
tool: "stripe.create_refund",
153+
tool: "provider.crm.update_customer",
145154
action: "write",
146-
resource: "refund/case-1042",
155+
resource: "provider/customer/cus_123",
156+
job_id: "support_case_resolution",
157+
case_id: "case-1042",
158+
customer_id: "cus_123",
147159
approval_id: "approval-123",
148160
user_id: "support-rep-17",
149161
});
150162
151163
await agentid.assertAllowed("tenant-a", {
152-
agent_id: "refund-agent",
153-
tool: "stripe.create_refund",
164+
agent_id: "enterprise-support-agent",
165+
tool: "provider.crm.update_customer",
154166
action: "write",
155-
resource: "refund/case-1042",
167+
resource: "provider/customer/cus_123",
168+
job_id: "support_case_resolution",
169+
case_id: "case-1042",
170+
customer_id: "cus_123",
156171
approved: true,
157172
jit_grant_id: grant.jit_grant_id,
158173
});

0 commit comments

Comments
 (0)