agent-passport-system-mcp 2.4.3 → 2.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +36 -3
  2. package/build/index.js +160 -1
  3. package/package.json +3 -3
package/README.md CHANGED
@@ -1,12 +1,33 @@
1
1
  # Agent Passport System MCP Server
2
2
 
3
+ <!-- mcp-name: io.github.aeoess/agent-passport-mcp -->
4
+
5
+ <a href="https://glama.ai/mcp/servers/@aeoess/agent-passport-system-mcp">
6
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@aeoess/agent-passport-system-mcp/badge" />
7
+ </a>
8
+
3
9
  MCP server for the [Agent Passport System](https://github.com/aeoess/agent-passport-system) — cryptographic identity, delegation, governance, and commerce for AI agents.
4
10
 
5
- **38 tools** across all 8 protocol layers. Works with any MCP client: Claude Desktop, Cursor, Windsurf, and more.
11
+ **44 tools** across all 8 protocol layers. Works with any MCP client: Claude Desktop, Cursor, Windsurf, and more.
6
12
 
7
13
  ## Quick Start
8
14
 
9
- ### Claude Desktop
15
+ ### Remote (no install)
16
+
17
+ Connect directly via SSE — works with any MCP client:
18
+
19
+ ```json
20
+ {
21
+ "mcpServers": {
22
+ "agent-passport": {
23
+ "type": "sse",
24
+ "url": "https://mcp.aeoess.com/sse"
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ ### Claude Desktop (local)
10
31
 
11
32
  Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
12
33
 
@@ -116,6 +137,17 @@ Add to your MCP config:
116
137
  | `execute_with_context` | Execute action through policy enforcement (intent → evaluate → verdict) |
117
138
  | `complete_action` | Complete action and get full proof chain (intent + decision + receipt) |
118
139
 
140
+ ### Principal Identity — 6 tools
141
+
142
+ | Tool | Description |
143
+ |------|-------------|
144
+ | `create_principal` | Create principal identity (human/org behind agents) with Ed25519 keypair |
145
+ | `endorse_agent` | Endorse an agent — cryptographic chain: principal → agent |
146
+ | `verify_endorsement` | Verify a principal's endorsement signature |
147
+ | `revoke_endorsement` | Revoke endorsement ("I no longer authorize this agent") |
148
+ | `create_disclosure` | Selective disclosure of principal identity (public/verified-only/minimal) |
149
+ | `get_fleet_status` | Status of all agents endorsed by the current principal |
150
+
119
151
  ## Architecture
120
152
 
121
153
  ```
@@ -131,7 +163,8 @@ Layer 1 — Agent Passport Protocol (Ed25519 identity)
131
163
 
132
164
  ## Links
133
165
 
134
- - npm SDK: [agent-passport-system](https://www.npmjs.com/package/agent-passport-system) (v1.9.1, 264 tests)
166
+ - npm SDK: [agent-passport-system](https://www.npmjs.com/package/agent-passport-system) (v1.10.1, 329 tests)
167
+ - Python SDK: [agent-passport-system](https://pypi.org/project/agent-passport-system/) (v0.4.0, 86 tests)
135
168
  - Paper: [doi.org/10.5281/zenodo.18749779](https://doi.org/10.5281/zenodo.18749779)
136
169
  - Docs: [aeoess.com/llms-full.txt](https://aeoess.com/llms-full.txt)
137
170
  - Agora: [aeoess.com/agora.html](https://aeoess.com/agora.html)
package/build/index.js CHANGED
@@ -29,7 +29,9 @@ createAgoraMessage, createFeed, appendToFeed, getThread, getByTopic, getTopics,
29
29
  // Values/Policy (Layer 2 + 5)
30
30
  loadFloor, attestFloor, createActionIntent, evaluateIntent, FloorValidatorV1,
31
31
  // Commerce (Layer 8)
32
- commercePreflight, createCommerceDelegation, getSpendSummary, requestHumanApproval, coordinationToAgora, } from "agent-passport-system";
32
+ commercePreflight, createCommerceDelegation, getSpendSummary, requestHumanApproval, coordinationToAgora,
33
+ // Principal Identity
34
+ createPrincipalIdentity, endorseAgent, verifyEndorsement, revokeEndorsement, createDisclosure, createFleet, addToFleet, getFleetStatus, revokeFromFleet, } from "agent-passport-system";
33
35
  // ═══════════════════════════════════════
34
36
  // State Management
35
37
  // ═══════════════════════════════════════
@@ -54,6 +56,10 @@ const state = {
54
56
  agentContext: null,
55
57
  floor: null,
56
58
  pendingActions: new Map(),
59
+ principal: null,
60
+ principalPrivateKey: null,
61
+ endorsements: new Map(),
62
+ fleet: null,
57
63
  };
58
64
  // Load persisted task state
59
65
  function loadTasks() {
@@ -1761,6 +1767,159 @@ server.tool("complete_action", "Complete a permitted action and get the full 3-s
1761
1767
  }
1762
1768
  });
1763
1769
  // ═══════════════════════════════════════
1770
+ // PRINCIPAL IDENTITY TOOLS
1771
+ // ═══════════════════════════════════════
1772
+ server.tool("create_principal", "Create a principal identity (human or org behind agents). Gets its own Ed25519 keypair.", {
1773
+ display_name: z.string().describe("Human-readable name (e.g. 'Tima', 'Acme Corp')"),
1774
+ domain: z.string().optional().describe("Verifiable domain (e.g. 'aeoess.com')"),
1775
+ jurisdiction: z.string().optional().describe("Legal jurisdiction (e.g. 'US', 'EU')"),
1776
+ contact_channel: z.string().optional().describe("Contact method (e.g. 'telegram:@aeoess')"),
1777
+ disclosure_level: z.enum(["public", "verified-only", "minimal"]).default("public").describe("How much identity to reveal"),
1778
+ }, async (args) => {
1779
+ const { principal, keyPair } = createPrincipalIdentity({
1780
+ displayName: args.display_name,
1781
+ domain: args.domain,
1782
+ jurisdiction: args.jurisdiction,
1783
+ contactChannel: args.contact_channel,
1784
+ disclosureLevel: args.disclosure_level,
1785
+ });
1786
+ state.principal = principal;
1787
+ state.principalPrivateKey = keyPair.privateKey;
1788
+ state.fleet = createFleet(principal);
1789
+ return {
1790
+ content: [{
1791
+ type: "text",
1792
+ text: JSON.stringify({
1793
+ principalId: principal.principalId,
1794
+ displayName: principal.displayName,
1795
+ publicKey: principal.publicKey.slice(0, 16) + '...',
1796
+ privateKey: keyPair.privateKey.slice(0, 16) + '... (store securely)',
1797
+ domain: principal.domain,
1798
+ disclosureLevel: principal.disclosureLevel,
1799
+ note: 'Principal created. Use endorse_agent to sign off on agents.',
1800
+ }, null, 2),
1801
+ }],
1802
+ };
1803
+ });
1804
+ server.tool("endorse_agent", "Endorse an agent as a principal. Creates a cryptographic chain: principal → agent.", {
1805
+ agent_id: z.string().describe("Agent ID to endorse"),
1806
+ agent_public_key: z.string().describe("Agent's Ed25519 public key"),
1807
+ scope: z.array(z.string()).describe("What the agent can do on principal's behalf"),
1808
+ relationship: z.enum(["creator", "operator", "employer", "sponsor"]).describe("How principal relates to agent"),
1809
+ expires_in_days: z.number().default(365).describe("Days until endorsement expires"),
1810
+ }, async (args) => {
1811
+ if (!state.principal || !state.principalPrivateKey) {
1812
+ return { content: [{ type: "text", text: 'No principal identity. Call create_principal first.' }], isError: true };
1813
+ }
1814
+ const endorsement = endorseAgent({
1815
+ principal: state.principal,
1816
+ principalPrivateKey: state.principalPrivateKey,
1817
+ agentId: args.agent_id,
1818
+ agentPublicKey: args.agent_public_key,
1819
+ scope: args.scope,
1820
+ relationship: args.relationship,
1821
+ expiresInDays: args.expires_in_days,
1822
+ });
1823
+ state.endorsements.set(endorsement.endorsementId, endorsement);
1824
+ if (state.fleet) {
1825
+ state.fleet = addToFleet(state.fleet, endorsement);
1826
+ }
1827
+ return {
1828
+ content: [{
1829
+ type: "text",
1830
+ text: JSON.stringify({
1831
+ endorsementId: endorsement.endorsementId,
1832
+ principalId: endorsement.principalId,
1833
+ agentId: endorsement.agentId,
1834
+ relationship: endorsement.relationship,
1835
+ scope: endorsement.scope,
1836
+ expiresAt: endorsement.expiresAt,
1837
+ note: 'Agent endorsed. The endorsement signature can be embedded in the agent\'s passport via endorse_passport.',
1838
+ }, null, 2),
1839
+ }],
1840
+ };
1841
+ });
1842
+ server.tool("verify_endorsement", "Verify a principal's endorsement of an agent. Checks cryptographic signature.", {
1843
+ endorsement_id: z.string().describe("Endorsement ID to verify"),
1844
+ }, async (args) => {
1845
+ const endorsement = state.endorsements.get(args.endorsement_id);
1846
+ if (!endorsement) {
1847
+ return { content: [{ type: "text", text: `Endorsement ${args.endorsement_id} not found in session.` }], isError: true };
1848
+ }
1849
+ const result = verifyEndorsement(endorsement);
1850
+ return {
1851
+ content: [{
1852
+ type: "text",
1853
+ text: JSON.stringify({
1854
+ valid: result.valid,
1855
+ expired: result.expired,
1856
+ revoked: result.revoked,
1857
+ principalId: result.principalId,
1858
+ agentId: result.agentId,
1859
+ errors: result.errors,
1860
+ }, null, 2),
1861
+ }],
1862
+ };
1863
+ });
1864
+ server.tool("revoke_endorsement", "Revoke a principal's endorsement of an agent. 'I no longer authorize this agent.'", {
1865
+ endorsement_id: z.string().describe("Endorsement ID to revoke"),
1866
+ reason: z.string().describe("Why the endorsement is being revoked"),
1867
+ }, async (args) => {
1868
+ const endorsement = state.endorsements.get(args.endorsement_id);
1869
+ if (!endorsement) {
1870
+ return { content: [{ type: "text", text: `Endorsement ${args.endorsement_id} not found.` }], isError: true };
1871
+ }
1872
+ const revoked = revokeEndorsement(endorsement, args.reason);
1873
+ state.endorsements.set(args.endorsement_id, revoked);
1874
+ if (state.fleet) {
1875
+ state.fleet = revokeFromFleet(state.fleet, revoked.agentId);
1876
+ }
1877
+ return {
1878
+ content: [{
1879
+ type: "text",
1880
+ text: JSON.stringify({
1881
+ revoked: true,
1882
+ endorsementId: revoked.endorsementId,
1883
+ agentId: revoked.agentId,
1884
+ reason: revoked.revokedReason,
1885
+ revokedAt: revoked.revokedAt,
1886
+ }, null, 2),
1887
+ }],
1888
+ };
1889
+ });
1890
+ server.tool("create_disclosure", "Create a selective disclosure of principal identity. Controls how much info is revealed.", {
1891
+ level: z.enum(["public", "verified-only", "minimal"]).describe("Disclosure level: public (everything), verified-only (id+key+domain), minimal (hash+DID only)"),
1892
+ }, async (args) => {
1893
+ if (!state.principal || !state.principalPrivateKey) {
1894
+ return { content: [{ type: "text", text: 'No principal identity. Call create_principal first.' }], isError: true };
1895
+ }
1896
+ const disclosure = createDisclosure(state.principal, state.principalPrivateKey, args.level);
1897
+ return {
1898
+ content: [{
1899
+ type: "text",
1900
+ text: JSON.stringify({
1901
+ disclosureId: disclosure.disclosureId,
1902
+ level: disclosure.level,
1903
+ revealedFields: disclosure.revealedFields,
1904
+ proof: disclosure.proof.slice(0, 16) + '...',
1905
+ note: 'Share this disclosure with other agents. They can verify it with verify_disclosure.',
1906
+ }, null, 2),
1907
+ }],
1908
+ };
1909
+ });
1910
+ server.tool("get_fleet_status", "Get status of all agents endorsed by the current principal.", {}, async () => {
1911
+ if (!state.fleet) {
1912
+ return { content: [{ type: "text", text: 'No fleet. Call create_principal first.' }], isError: true };
1913
+ }
1914
+ const status = getFleetStatus(state.fleet);
1915
+ return {
1916
+ content: [{
1917
+ type: "text",
1918
+ text: JSON.stringify(status, null, 2),
1919
+ }],
1920
+ };
1921
+ });
1922
+ // ═══════════════════════════════════════
1764
1923
  // MCP Prompts — Role-Specific
1765
1924
  // ═══════════════════════════════════════
1766
1925
  server.prompt("coordination_role", "Get instructions for your assigned coordination role", {}, async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-passport-system-mcp",
3
- "version": "2.4.3",
3
+ "version": "2.4.4",
4
4
  "mcpName": "io.github.aeoess/agent-passport-mcp",
5
5
  "description": "MCP server for Agent Passport System — cryptographic identity, delegation, governance, and deliberation for AI agents",
6
6
  "type": "module",
@@ -45,11 +45,11 @@
45
45
  "homepage": "https://github.com/aeoess/agent-passport-mcp",
46
46
  "dependencies": {
47
47
  "@modelcontextprotocol/sdk": "^1.12.0",
48
- "agent-passport-system": "^1.9.0",
48
+ "agent-passport-system": "file:../agent-passport-system/agent-passport-system-1.10.1.tgz",
49
49
  "zod": "^3.25.0"
50
50
  },
51
51
  "devDependencies": {
52
- "@types/node": "^25.3.2",
52
+ "@types/node": "^25.3.5",
53
53
  "typescript": "^5.9.3"
54
54
  },
55
55
  "peerDependencies": {