@attesso/mcp 1.3.2 → 2.0.0
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.
- package/LICENSE +21 -0
- package/README.md +13 -58
- package/dist/bin/attesso-mcp.js +0 -0
- package/dist/src/schemas.d.ts +3 -23
- package/dist/src/schemas.d.ts.map +1 -1
- package/dist/src/schemas.js +3 -10
- package/dist/src/schemas.js.map +1 -1
- package/dist/src/server.d.ts +3 -12
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +15 -71
- package/dist/src/server.js.map +1 -1
- package/dist/src/tools.d.ts +2 -3
- package/dist/src/tools.d.ts.map +1 -1
- package/dist/src/tools.js +11 -22
- package/dist/src/tools.js.map +1 -1
- package/package.json +16 -17
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Attesso
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# @attesso/mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MCP server for Attesso authorization and safety tools. Works with Claude Desktop and any MCP-compatible client.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Attesso doesn't touch money — it authorizes, validates, revokes, and audits. This MCP server lets AI agents check their spending authorization and audit trail.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Setup
|
|
8
8
|
|
|
9
9
|
```json
|
|
10
10
|
{
|
|
@@ -27,14 +27,13 @@ Add to your MCP client configuration:
|
|
|
27
27
|
| Tool | Description |
|
|
28
28
|
|------|-------------|
|
|
29
29
|
| `attesso_get_mandate` | Get mandate details: spending limit, status, restrictions |
|
|
30
|
-
| `
|
|
30
|
+
| `attesso_get_audit_trail` | Full liability chain, biometric proof, and audit trail |
|
|
31
31
|
|
|
32
32
|
### Write Operations
|
|
33
33
|
|
|
34
34
|
| Tool | Description |
|
|
35
35
|
|------|-------------|
|
|
36
|
-
| `
|
|
37
|
-
| `attesso_revoke_mandate` | Revoke a mandate so it can no longer be used |
|
|
36
|
+
| `attesso_revoke_mandate` | Revoke mandate, atomically destroy all derived instruments |
|
|
38
37
|
|
|
39
38
|
## Environment Variables
|
|
40
39
|
|
|
@@ -53,68 +52,24 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
53
52
|
|
|
54
53
|
const server = createAttessoMCPServer({
|
|
55
54
|
apiKey: process.env.ATTESSO_API_KEY,
|
|
56
|
-
mandateId: 'mandate_xyz',
|
|
57
|
-
readOnlyMode: false,
|
|
55
|
+
mandateId: 'mandate_xyz',
|
|
56
|
+
readOnlyMode: false,
|
|
58
57
|
});
|
|
59
58
|
|
|
60
59
|
const transport = new StdioServerTransport();
|
|
61
60
|
await server.connect(transport);
|
|
62
61
|
```
|
|
63
62
|
|
|
64
|
-
## Security
|
|
65
|
-
|
|
66
|
-
1. **API Keys**: Only use restricted keys (`rk_test_*` for development, `rk_live_*` for production). Never use management keys (`sk_mgmt_*`).
|
|
67
|
-
|
|
68
|
-
2. **Mandate Creation**: Mandates require user biometric authentication and cannot be created via MCP. The user must pre-authorize a mandate before the AI assistant can use it.
|
|
69
|
-
|
|
70
|
-
3. **Read-Only Mode**: For monitoring or status checks, enable read-only mode to prevent card issuance:
|
|
71
|
-
```json
|
|
72
|
-
{
|
|
73
|
-
"env": {
|
|
74
|
-
"ATTESSO_API_KEY": "rk_test_...",
|
|
75
|
-
"ATTESSO_READ_ONLY": "true"
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Example Conversation
|
|
81
|
-
|
|
82
|
-
**User**: What's the status of mandate_abc123?
|
|
83
|
-
|
|
84
|
-
**Assistant** (calls `attesso_get_mandate`):
|
|
85
|
-
```json
|
|
86
|
-
{
|
|
87
|
-
"id": "mandate_abc123",
|
|
88
|
-
"status": "active",
|
|
89
|
-
"spendingLimit": 50000,
|
|
90
|
-
"currency": "USD"
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Assistant**: Mandate mandate_abc123 is active with $500.00 available to spend.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
**User**: I need a card for $347 to book a flight.
|
|
99
|
-
|
|
100
|
-
**Assistant** (calls `attesso_issue_card`):
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"cardId": "card_xyz789",
|
|
104
|
-
"number": "4242...1234",
|
|
105
|
-
"expMonth": 3,
|
|
106
|
-
"expYear": 2026,
|
|
107
|
-
"expiresAt": "2026-02-08T12:05:00Z",
|
|
108
|
-
"spendingLimit": 34700
|
|
109
|
-
}
|
|
110
|
-
```
|
|
63
|
+
## Security
|
|
111
64
|
|
|
112
|
-
**
|
|
65
|
+
- **API Keys**: Only restricted keys (`rk_test_*`, `rk_live_*`). Never management keys.
|
|
66
|
+
- **Mandate creation requires biometric auth** — cannot be done via MCP. The user must pre-authorize.
|
|
67
|
+
- **Read-only mode**: For monitoring without revocation capability.
|
|
113
68
|
|
|
114
69
|
## Related Packages
|
|
115
70
|
|
|
116
|
-
- [`@attesso/sdk`](https://www.npmjs.com/package/@attesso/sdk)
|
|
117
|
-
- [`@attesso/types`](https://www.npmjs.com/package/@attesso/types)
|
|
71
|
+
- [`@attesso/sdk`](https://www.npmjs.com/package/@attesso/sdk) — API client with Vercel AI SDK integration
|
|
72
|
+
- [`@attesso/types`](https://www.npmjs.com/package/@attesso/types) — TypeScript types
|
|
118
73
|
|
|
119
74
|
## License
|
|
120
75
|
|
package/dist/bin/attesso-mcp.js
CHANGED
|
File without changes
|
package/dist/src/schemas.d.ts
CHANGED
|
@@ -11,33 +11,14 @@ export declare const schemas: {
|
|
|
11
11
|
}, {
|
|
12
12
|
mandateId: string;
|
|
13
13
|
}>;
|
|
14
|
-
|
|
14
|
+
revokeMandate: z.ZodObject<{
|
|
15
15
|
mandateId: z.ZodString;
|
|
16
|
-
amount: z.ZodNumber;
|
|
17
|
-
ttlSeconds: z.ZodOptional<z.ZodNumber>;
|
|
18
|
-
allowedMccs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
19
|
-
blockedMccs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
20
16
|
}, "strip", z.ZodTypeAny, {
|
|
21
17
|
mandateId: string;
|
|
22
|
-
amount: number;
|
|
23
|
-
ttlSeconds?: number | undefined;
|
|
24
|
-
allowedMccs?: string[] | undefined;
|
|
25
|
-
blockedMccs?: string[] | undefined;
|
|
26
18
|
}, {
|
|
27
19
|
mandateId: string;
|
|
28
|
-
amount: number;
|
|
29
|
-
ttlSeconds?: number | undefined;
|
|
30
|
-
allowedMccs?: string[] | undefined;
|
|
31
|
-
blockedMccs?: string[] | undefined;
|
|
32
20
|
}>;
|
|
33
|
-
|
|
34
|
-
cardId: z.ZodString;
|
|
35
|
-
}, "strip", z.ZodTypeAny, {
|
|
36
|
-
cardId: string;
|
|
37
|
-
}, {
|
|
38
|
-
cardId: string;
|
|
39
|
-
}>;
|
|
40
|
-
revokeMandate: z.ZodObject<{
|
|
21
|
+
getAuditTrail: z.ZodObject<{
|
|
41
22
|
mandateId: z.ZodString;
|
|
42
23
|
}, "strip", z.ZodTypeAny, {
|
|
43
24
|
mandateId: string;
|
|
@@ -46,7 +27,6 @@ export declare const schemas: {
|
|
|
46
27
|
}>;
|
|
47
28
|
};
|
|
48
29
|
export type GetMandateInput = z.infer<typeof schemas.getMandate>;
|
|
49
|
-
export type IssueCardInput = z.infer<typeof schemas.issueCard>;
|
|
50
|
-
export type GetCardInput = z.infer<typeof schemas.getCard>;
|
|
51
30
|
export type RevokeMandateInput = z.infer<typeof schemas.revokeMandate>;
|
|
31
|
+
export type GetAuditTrailInput = z.infer<typeof schemas.getAuditTrail>;
|
|
52
32
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;CAYnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC"}
|
package/dist/src/schemas.js
CHANGED
|
@@ -7,18 +7,11 @@ export const schemas = {
|
|
|
7
7
|
getMandate: z.object({
|
|
8
8
|
mandateId: z.string().describe('The unique identifier of the mandate to retrieve'),
|
|
9
9
|
}),
|
|
10
|
-
issueCard: z.object({
|
|
11
|
-
mandateId: z.string().describe('The mandate ID to issue an ephemeral card from'),
|
|
12
|
-
amount: z.number().positive().describe('Amount in cents the agent wants to spend (e.g., 34700 for $347.00)'),
|
|
13
|
-
ttlSeconds: z.number().int().min(60).max(900).optional().describe('Card time-to-live in seconds (60-900, default 300)'),
|
|
14
|
-
allowedMccs: z.array(z.string()).optional().describe('Restrict card to these merchant category codes'),
|
|
15
|
-
blockedMccs: z.array(z.string()).optional().describe('Block card from these merchant category codes'),
|
|
16
|
-
}),
|
|
17
|
-
getCard: z.object({
|
|
18
|
-
cardId: z.string().describe('The unique identifier of the card to retrieve'),
|
|
19
|
-
}),
|
|
20
10
|
revokeMandate: z.object({
|
|
21
11
|
mandateId: z.string().describe('The mandate ID to revoke'),
|
|
22
12
|
}),
|
|
13
|
+
getAuditTrail: z.object({
|
|
14
|
+
mandateId: z.string().describe('The mandate ID to get the audit trail for'),
|
|
15
|
+
}),
|
|
23
16
|
};
|
|
24
17
|
//# sourceMappingURL=schemas.js.map
|
package/dist/src/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KACnF,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KACnF,CAAC;IAEF,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC3D,CAAC;IAEF,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC5E,CAAC;CACH,CAAC"}
|
package/dist/src/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server Factory for Attesso
|
|
3
3
|
*
|
|
4
|
-
* Creates an MCP server that exposes Attesso
|
|
4
|
+
* Creates an MCP server that exposes Attesso authorization tools.
|
|
5
5
|
* Used by Claude Desktop and other MCP-compatible AI assistants.
|
|
6
6
|
*/
|
|
7
7
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
@@ -19,12 +19,11 @@ export interface AttessoMCPServerConfig {
|
|
|
19
19
|
/**
|
|
20
20
|
* If provided, use this mandate ID for all operations.
|
|
21
21
|
* Falls back to ATTESSO_MANDATE_ID env var.
|
|
22
|
-
* Useful for pre-configured agents with a known mandate.
|
|
23
22
|
*/
|
|
24
23
|
mandateId?: string;
|
|
25
24
|
/**
|
|
26
|
-
* If true, only expose read-only tools (get_mandate,
|
|
27
|
-
* Write operations (
|
|
25
|
+
* If true, only expose read-only tools (get_mandate, get_audit_trail).
|
|
26
|
+
* Write operations (revoke_mandate) will not be available.
|
|
28
27
|
* @default false
|
|
29
28
|
*/
|
|
30
29
|
readOnlyMode?: boolean;
|
|
@@ -41,14 +40,6 @@ export interface AttessoMCPServerConfig {
|
|
|
41
40
|
* const transport = new StdioServerTransport();
|
|
42
41
|
* await server.connect(transport);
|
|
43
42
|
* ```
|
|
44
|
-
*
|
|
45
|
-
* @example With configuration
|
|
46
|
-
* ```typescript
|
|
47
|
-
* const server = createAttessoMCPServer({
|
|
48
|
-
* mandateId: 'mandate_xyz',
|
|
49
|
-
* readOnlyMode: true,
|
|
50
|
-
* });
|
|
51
|
-
* ```
|
|
52
43
|
*/
|
|
53
44
|
export declare function createAttessoMCPServer(config?: AttessoMCPServerConfig): Server;
|
|
54
45
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAmBnE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,sBAA2B,GAAG,MAAM,CAwFlF"}
|
package/dist/src/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server Factory for Attesso
|
|
3
3
|
*
|
|
4
|
-
* Creates an MCP server that exposes Attesso
|
|
4
|
+
* Creates an MCP server that exposes Attesso authorization tools.
|
|
5
5
|
* Used by Claude Desktop and other MCP-compatible AI assistants.
|
|
6
6
|
*/
|
|
7
7
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
@@ -20,18 +20,9 @@ import { getToolByName, getReadOnlyTools, getAllTools, } from './tools.js';
|
|
|
20
20
|
* const transport = new StdioServerTransport();
|
|
21
21
|
* await server.connect(transport);
|
|
22
22
|
* ```
|
|
23
|
-
*
|
|
24
|
-
* @example With configuration
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const server = createAttessoMCPServer({
|
|
27
|
-
* mandateId: 'mandate_xyz',
|
|
28
|
-
* readOnlyMode: true,
|
|
29
|
-
* });
|
|
30
|
-
* ```
|
|
31
23
|
*/
|
|
32
24
|
export function createAttessoMCPServer(config = {}) {
|
|
33
25
|
const apiKey = config.apiKey ?? process.env.ATTESSO_API_KEY;
|
|
34
|
-
// Validate API key format (only restricted keys allowed for agents)
|
|
35
26
|
if (apiKey && !apiKey.startsWith('rk_test_') && !apiKey.startsWith('rk_live_')) {
|
|
36
27
|
console.error('Error: Attesso MCP server requires restricted keys (rk_test_* or rk_live_*)');
|
|
37
28
|
}
|
|
@@ -41,7 +32,6 @@ export function createAttessoMCPServer(config = {}) {
|
|
|
41
32
|
});
|
|
42
33
|
const defaultMandateId = config.mandateId ?? process.env.ATTESSO_MANDATE_ID;
|
|
43
34
|
const readOnlyMode = config.readOnlyMode ?? false;
|
|
44
|
-
// Get tools based on mode
|
|
45
35
|
const availableTools = readOnlyMode ? getReadOnlyTools() : getAllTools();
|
|
46
36
|
const server = new Server({
|
|
47
37
|
name: 'attesso',
|
|
@@ -51,7 +41,6 @@ export function createAttessoMCPServer(config = {}) {
|
|
|
51
41
|
tools: {},
|
|
52
42
|
},
|
|
53
43
|
});
|
|
54
|
-
// Handle list_tools request
|
|
55
44
|
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
56
45
|
const tools = availableTools.map((tool) => ({
|
|
57
46
|
name: tool.name,
|
|
@@ -60,61 +49,32 @@ export function createAttessoMCPServer(config = {}) {
|
|
|
60
49
|
}));
|
|
61
50
|
return { tools };
|
|
62
51
|
});
|
|
63
|
-
// Handle call_tool request
|
|
64
52
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
65
53
|
const { name, arguments: args } = request.params;
|
|
66
54
|
const toolDef = getToolByName(name);
|
|
67
55
|
if (!toolDef) {
|
|
68
56
|
return {
|
|
69
|
-
content: [
|
|
70
|
-
{
|
|
71
|
-
type: 'text',
|
|
72
|
-
text: JSON.stringify({ error: `Unknown tool: ${name}` }),
|
|
73
|
-
},
|
|
74
|
-
],
|
|
57
|
+
content: [{ type: 'text', text: JSON.stringify({ error: `Unknown tool: ${name}` }) }],
|
|
75
58
|
isError: true,
|
|
76
59
|
};
|
|
77
60
|
}
|
|
78
|
-
// Check read-only mode
|
|
79
61
|
if (readOnlyMode && toolDef.isWriteOperation) {
|
|
80
62
|
return {
|
|
81
|
-
content: [
|
|
82
|
-
{
|
|
83
|
-
type: 'text',
|
|
84
|
-
text: JSON.stringify({
|
|
85
|
-
error: 'Write operations are disabled in read-only mode',
|
|
86
|
-
tool: name,
|
|
87
|
-
}),
|
|
88
|
-
},
|
|
89
|
-
],
|
|
63
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'Write operations are disabled in read-only mode', tool: name }) }],
|
|
90
64
|
isError: true,
|
|
91
65
|
};
|
|
92
66
|
}
|
|
93
|
-
// Validate input
|
|
94
67
|
const parseResult = toolDef.zodSchema.safeParse(args);
|
|
95
68
|
if (!parseResult.success) {
|
|
96
69
|
return {
|
|
97
|
-
content: [
|
|
98
|
-
{
|
|
99
|
-
type: 'text',
|
|
100
|
-
text: JSON.stringify({
|
|
101
|
-
error: 'Invalid input',
|
|
102
|
-
details: parseResult.error.format(),
|
|
103
|
-
}),
|
|
104
|
-
},
|
|
105
|
-
],
|
|
70
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'Invalid input', details: parseResult.error.format() }) }],
|
|
106
71
|
isError: true,
|
|
107
72
|
};
|
|
108
73
|
}
|
|
109
74
|
try {
|
|
110
75
|
const result = await executeToolCall(client, name, parseResult.data, defaultMandateId);
|
|
111
76
|
return {
|
|
112
|
-
content: [
|
|
113
|
-
{
|
|
114
|
-
type: 'text',
|
|
115
|
-
text: JSON.stringify(result, null, 2),
|
|
116
|
-
},
|
|
117
|
-
],
|
|
77
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
118
78
|
};
|
|
119
79
|
}
|
|
120
80
|
catch (error) {
|
|
@@ -124,52 +84,36 @@ export function createAttessoMCPServer(config = {}) {
|
|
|
124
84
|
? { error: error.message }
|
|
125
85
|
: { error: 'Unknown error' };
|
|
126
86
|
return {
|
|
127
|
-
content: [
|
|
128
|
-
{
|
|
129
|
-
type: 'text',
|
|
130
|
-
text: JSON.stringify(errorMessage),
|
|
131
|
-
},
|
|
132
|
-
],
|
|
87
|
+
content: [{ type: 'text', text: JSON.stringify(errorMessage) }],
|
|
133
88
|
isError: true,
|
|
134
89
|
};
|
|
135
90
|
}
|
|
136
91
|
});
|
|
137
92
|
return server;
|
|
138
93
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Execute a tool call against the Attesso API.
|
|
141
|
-
*/
|
|
142
94
|
async function executeToolCall(client, toolName, input, defaultMandateId) {
|
|
143
95
|
switch (toolName) {
|
|
144
96
|
case 'attesso_get_mandate': {
|
|
145
97
|
const { mandateId } = input;
|
|
146
98
|
const id = mandateId ?? defaultMandateId;
|
|
147
|
-
if (!id)
|
|
99
|
+
if (!id)
|
|
148
100
|
throw new AttessoError('MANDATE_NOT_FOUND', 'mandateId is required');
|
|
149
|
-
}
|
|
150
101
|
return client.getMandate(id);
|
|
151
102
|
}
|
|
152
|
-
case '
|
|
153
|
-
const { mandateId
|
|
103
|
+
case 'attesso_revoke_mandate': {
|
|
104
|
+
const { mandateId } = input;
|
|
154
105
|
const id = mandateId ?? defaultMandateId;
|
|
155
|
-
if (!id)
|
|
106
|
+
if (!id)
|
|
156
107
|
throw new AttessoError('MANDATE_NOT_FOUND', 'mandateId is required');
|
|
157
|
-
|
|
158
|
-
return
|
|
108
|
+
await client.revokeMandate(id);
|
|
109
|
+
return { revoked: true };
|
|
159
110
|
}
|
|
160
|
-
case '
|
|
161
|
-
const { cardId } = input;
|
|
162
|
-
// Use the SDK's request method via a direct API call
|
|
163
|
-
return client.request('GET', `/v1/cards/${cardId}`);
|
|
164
|
-
}
|
|
165
|
-
case 'attesso_revoke_mandate': {
|
|
111
|
+
case 'attesso_get_audit_trail': {
|
|
166
112
|
const { mandateId } = input;
|
|
167
113
|
const id = mandateId ?? defaultMandateId;
|
|
168
|
-
if (!id)
|
|
114
|
+
if (!id)
|
|
169
115
|
throw new AttessoError('MANDATE_NOT_FOUND', 'mandateId is required');
|
|
170
|
-
|
|
171
|
-
// Use the SDK's request method via a direct API call
|
|
172
|
-
return client.request('DELETE', `/v1/mandates/${id}`);
|
|
116
|
+
return client.getDisputeEvidence(id);
|
|
173
117
|
}
|
|
174
118
|
default:
|
|
175
119
|
throw new Error(`Unknown tool: ${toolName}`);
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAEL,aAAa,EACb,gBAAgB,EAChB,WAAW,GACZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Tool Definitions for Attesso
|
|
3
3
|
*
|
|
4
|
-
* Defines the
|
|
4
|
+
* Defines the 3 tools exposed via MCP:
|
|
5
5
|
* - attesso_get_mandate (read)
|
|
6
|
-
* - attesso_issue_card (write)
|
|
7
|
-
* - attesso_get_card (read)
|
|
8
6
|
* - attesso_revoke_mandate (write)
|
|
7
|
+
* - attesso_get_audit_trail (read)
|
|
9
8
|
*/
|
|
10
9
|
import { z } from 'zod';
|
|
11
10
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
package/dist/src/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,cAAc,EA+B3C,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEtE;AAED,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAEnD;AAED,wBAAgB,WAAW,IAAI,cAAc,EAAE,CAE9C"}
|
package/dist/src/tools.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Tool Definitions for Attesso
|
|
3
3
|
*
|
|
4
|
-
* Defines the
|
|
4
|
+
* Defines the 3 tools exposed via MCP:
|
|
5
5
|
* - attesso_get_mandate (read)
|
|
6
|
-
* - attesso_issue_card (write)
|
|
7
|
-
* - attesso_get_card (read)
|
|
8
6
|
* - attesso_revoke_mandate (write)
|
|
7
|
+
* - attesso_get_audit_trail (read)
|
|
9
8
|
*/
|
|
10
9
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
11
10
|
import { schemas } from './schemas.js';
|
|
@@ -14,35 +13,25 @@ export const toolDefinitions = [
|
|
|
14
13
|
{
|
|
15
14
|
name: 'attesso_get_mandate',
|
|
16
15
|
description: 'Get details about a spending mandate including the spending limit, status, and restrictions. ' +
|
|
17
|
-
'Use this to check
|
|
16
|
+
'Use this to check what the user has authorized and what constraints apply.',
|
|
18
17
|
inputSchema: zodToJsonSchema(schemas.getMandate, 'GetMandateInput'),
|
|
19
18
|
zodSchema: schemas.getMandate,
|
|
20
19
|
isWriteOperation: false,
|
|
21
20
|
},
|
|
22
21
|
{
|
|
23
|
-
name: '
|
|
24
|
-
description: 'Get the
|
|
25
|
-
'
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
name: 'attesso_get_audit_trail',
|
|
23
|
+
description: 'Get the complete audit trail for a mandate including biometric proof, ' +
|
|
24
|
+
'developer identity, agent actions, and revocation events. ' +
|
|
25
|
+
'Use this to review what happened under a mandate or to resolve a dispute.',
|
|
26
|
+
inputSchema: zodToJsonSchema(schemas.getAuditTrail, 'GetAuditTrailInput'),
|
|
27
|
+
zodSchema: schemas.getAuditTrail,
|
|
28
28
|
isWriteOperation: false,
|
|
29
29
|
},
|
|
30
30
|
// Write operations
|
|
31
|
-
{
|
|
32
|
-
name: 'attesso_issue_card',
|
|
33
|
-
description: 'Issue an ephemeral virtual card from a standing mandate. ' +
|
|
34
|
-
'This auth-holds the user\'s payment method and creates a card with a TTL. ' +
|
|
35
|
-
'The card auto-destructs after use or when the TTL expires. ' +
|
|
36
|
-
'Amount must be in cents (e.g., 34700 for $347.00). ' +
|
|
37
|
-
'Only call this when you are ready to make a purchase.',
|
|
38
|
-
inputSchema: zodToJsonSchema(schemas.issueCard, 'IssueCardInput'),
|
|
39
|
-
zodSchema: schemas.issueCard,
|
|
40
|
-
isWriteOperation: true,
|
|
41
|
-
},
|
|
42
31
|
{
|
|
43
32
|
name: 'attesso_revoke_mandate',
|
|
44
|
-
description: 'Revoke a mandate
|
|
45
|
-
'Use this when
|
|
33
|
+
description: 'Revoke a mandate, atomically destroying all derived payment instruments ' +
|
|
34
|
+
'across all processors. Use this when spending authorization is no longer needed.',
|
|
46
35
|
inputSchema: zodToJsonSchema(schemas.revokeMandate, 'RevokeMandateInput'),
|
|
47
36
|
zodSchema: schemas.revokeMandate,
|
|
48
37
|
isWriteOperation: true,
|
package/dist/src/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvC,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,kBAAkB;IAClB;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,+FAA+F;YAC/F,4EAA4E;QAC9E,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACnE,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,gBAAgB,EAAE,KAAK;KACxB;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,wEAAwE;YACxE,4DAA4D;YAC5D,2EAA2E;QAC7E,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC;QACzE,SAAS,EAAE,OAAO,CAAC,aAAa;QAChC,gBAAgB,EAAE,KAAK;KACxB;IACD,mBAAmB;IACnB;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,0EAA0E;YAC1E,kFAAkF;QACpF,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC;QACzE,SAAS,EAAE,OAAO,CAAC,aAAa;QAChC,gBAAgB,EAAE,IAAI;KACvB;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@attesso/mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Attesso
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Attesso MCP server. Authorization and safety tools for AI agents.",
|
|
5
5
|
"author": "Attesso",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -31,22 +31,27 @@
|
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"dev": "tsc --watch",
|
|
37
|
+
"clean": "rm -rf dist"
|
|
38
|
+
},
|
|
34
39
|
"keywords": [
|
|
35
40
|
"attesso",
|
|
36
41
|
"mcp",
|
|
37
42
|
"model-context-protocol",
|
|
38
43
|
"ai-agents",
|
|
39
44
|
"mandates",
|
|
40
|
-
"
|
|
41
|
-
"
|
|
45
|
+
"authorization",
|
|
46
|
+
"safety",
|
|
42
47
|
"claude",
|
|
43
48
|
"llm"
|
|
44
49
|
],
|
|
45
50
|
"dependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"
|
|
48
|
-
"@
|
|
49
|
-
"
|
|
51
|
+
"@attesso/sdk": "workspace:*",
|
|
52
|
+
"@attesso/types": "workspace:*",
|
|
53
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
54
|
+
"zod-to-json-schema": "^3.23.0"
|
|
50
55
|
},
|
|
51
56
|
"peerDependencies": {
|
|
52
57
|
"zod": ">=3.25.0"
|
|
@@ -57,14 +62,8 @@
|
|
|
57
62
|
}
|
|
58
63
|
},
|
|
59
64
|
"devDependencies": {
|
|
60
|
-
"typescript": "^5.
|
|
61
|
-
"vitest": "^
|
|
65
|
+
"typescript": "^5.9.0",
|
|
66
|
+
"vitest": "^4.0.0",
|
|
62
67
|
"zod": "^3.25.0"
|
|
63
|
-
},
|
|
64
|
-
"scripts": {
|
|
65
|
-
"build": "tsc",
|
|
66
|
-
"dev": "tsc --watch",
|
|
67
|
-
"clean": "rm -rf dist",
|
|
68
|
-
"test": "vitest run"
|
|
69
68
|
}
|
|
70
|
-
}
|
|
69
|
+
}
|