hashlock-mcp-server 1.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/README.md +60 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Hashlock MCP Server
|
|
2
|
+
|
|
3
|
+
MCP server for the [Hashlock](https://hashlock.tech) intent protocol. Enables AI agents to create, commit, validate, explain, and parse trading intents with attestation-based counterparty verification.
|
|
4
|
+
|
|
5
|
+
## Tools
|
|
6
|
+
|
|
7
|
+
| Tool | Description |
|
|
8
|
+
|------|-------------|
|
|
9
|
+
| `create_intent` | Create a HashLockIntent with full parameter control |
|
|
10
|
+
| `commit_intent` | Create an off-chain commitment with selective disclosure |
|
|
11
|
+
| `explain_intent` | Generate human-readable explanation of an intent |
|
|
12
|
+
| `parse_natural_language` | Parse natural language into a structured intent (EN & TR) |
|
|
13
|
+
| `validate_intent` | Validate an intent against schema and business rules |
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
### Environment Variables
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
HASHLOCK_API_URL=https://api.hashlock.tech
|
|
21
|
+
HASHLOCK_API_KEY=your-api-key
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Claude Desktop / Claude Code
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"mcpServers": {
|
|
29
|
+
"hashlock": {
|
|
30
|
+
"command": "npx",
|
|
31
|
+
"args": ["-y", "hashlock-mcp-server"],
|
|
32
|
+
"env": {
|
|
33
|
+
"HASHLOCK_API_URL": "https://api.hashlock.tech",
|
|
34
|
+
"HASHLOCK_API_KEY": "your-api-key"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### From Source
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
git clone https://github.com/Hashlock-Tech/hashlock-mcp-server.git
|
|
45
|
+
cd hashlock-mcp-server
|
|
46
|
+
npm install
|
|
47
|
+
npm run build
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Key Concepts
|
|
51
|
+
|
|
52
|
+
**Attestation Tiers**: NONE > BASIC > STANDARD > ENHANCED > INSTITUTIONAL
|
|
53
|
+
|
|
54
|
+
**Sealed Bids**: Use `commit_intent` with `hideAmounts: true`, `hideIdentity: true`, `revealOnMatch: false`
|
|
55
|
+
|
|
56
|
+
**Settlement Types**: bilateral (direct), ring (multi-party), batch (aggregated)
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
const TIERS = ["NONE", "BASIC", "STANDARD", "ENHANCED", "INSTITUTIONAL"];
|
|
6
|
+
const ASSETS = ["ETH", "ERC20", "ERC721"];
|
|
7
|
+
const SETTLEMENT_TYPES = ["bilateral", "ring", "batch"];
|
|
8
|
+
const SOLVER_TYPES = ["open", "preferred", "exclusive"];
|
|
9
|
+
const SOLVER_STRATEGIES = ["best_price", "fastest", "lowest_fee"];
|
|
10
|
+
const TRIGGER_TYPES = ["immediate", "conditional"];
|
|
11
|
+
const ATOMICITY_TYPES = ["full", "partial"];
|
|
12
|
+
const PRINCIPAL_TYPES = ["HUMAN", "INSTITUTION", "AGENT"];
|
|
13
|
+
class HashlockClient {
|
|
14
|
+
baseUrl;
|
|
15
|
+
apiKey;
|
|
16
|
+
constructor(baseUrl, apiKey) {
|
|
17
|
+
this.baseUrl = baseUrl.replace(/\/+$/, "");
|
|
18
|
+
this.apiKey = apiKey;
|
|
19
|
+
}
|
|
20
|
+
async request(path, init = {}) {
|
|
21
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
22
|
+
...init,
|
|
23
|
+
headers: {
|
|
24
|
+
"content-type": "application/json",
|
|
25
|
+
authorization: `Bearer ${this.apiKey}`,
|
|
26
|
+
...(init.headers ?? {}),
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
const body = await res.text().catch(() => "");
|
|
31
|
+
throw new Error(`Hashlock API ${res.status} ${res.statusText}: ${body}`);
|
|
32
|
+
}
|
|
33
|
+
return (await res.json());
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const server = new McpServer({ name: "hashlock", version: "1.0.0" });
|
|
37
|
+
function getClient() {
|
|
38
|
+
const url = process.env.HASHLOCK_API_URL;
|
|
39
|
+
const key = process.env.HASHLOCK_API_KEY;
|
|
40
|
+
if (!url || !key) {
|
|
41
|
+
throw new Error("Missing HASHLOCK_API_URL or HASHLOCK_API_KEY environment variables.");
|
|
42
|
+
}
|
|
43
|
+
return new HashlockClient(url, key);
|
|
44
|
+
}
|
|
45
|
+
server.tool("create_intent", "Create a HashLockIntent via the fluent builder. Returns the validated intent JSON.", {
|
|
46
|
+
giveAsset: z.enum(ASSETS).describe("Asset type to give"),
|
|
47
|
+
giveAmount: z.string().describe("Amount in smallest unit (wei for ETH)"),
|
|
48
|
+
giveChain: z.number().describe("Source chain ID"),
|
|
49
|
+
giveToken: z.string().optional().describe("Token contract address (required for ERC20/ERC721)"),
|
|
50
|
+
receiveAsset: z.enum(ASSETS).describe("Asset type to receive"),
|
|
51
|
+
receiveMinAmount: z.string().describe("Minimum acceptable amount in smallest unit"),
|
|
52
|
+
receiveChain: z.number().describe("Destination chain ID"),
|
|
53
|
+
receiveToken: z.string().optional().describe("Token contract address"),
|
|
54
|
+
receiveMaxAmount: z.string().optional().describe("Maximum amount (optional upper bound)"),
|
|
55
|
+
deadlineSeconds: z.number().describe("Deadline in seconds from now"),
|
|
56
|
+
maxSlippage: z.number().min(0).max(1).optional().describe("Max slippage (0.005 = 0.5%)"),
|
|
57
|
+
partialFill: z.boolean().optional().describe("Allow partial fills"),
|
|
58
|
+
atomicity: z.enum(ATOMICITY_TYPES).default("full").describe("Atomicity guarantee"),
|
|
59
|
+
settlementType: z.enum(SETTLEMENT_TYPES).default("bilateral").describe("Settlement mechanism"),
|
|
60
|
+
ringParties: z.array(z.string()).optional().describe("Ring settlement participant addresses"),
|
|
61
|
+
solverType: z.enum(SOLVER_TYPES).default("open").describe("Solver access type"),
|
|
62
|
+
solverStrategy: z.enum(SOLVER_STRATEGIES).default("best_price").describe("Execution strategy"),
|
|
63
|
+
solverPreferred: z.array(z.string()).optional().describe("Preferred solver addresses"),
|
|
64
|
+
solverMaxFee: z.string().optional().describe("Max fee payable to solver"),
|
|
65
|
+
triggerType: z.enum(TRIGGER_TYPES).optional().describe("Trigger type"),
|
|
66
|
+
triggerDescription: z.string().optional().describe("Human-readable trigger condition"),
|
|
67
|
+
triggerAgentId: z.string().optional().describe("Producing agent ID"),
|
|
68
|
+
triggerConfidence: z.number().min(0).max(1).optional().describe("Agent confidence score"),
|
|
69
|
+
attestationTier: z.enum(TIERS).optional().describe("Signer's attested KYC tier"),
|
|
70
|
+
attestationPrincipalId: z.string().optional().describe("Principal ID hash"),
|
|
71
|
+
attestationPrincipalType: z.enum(PRINCIPAL_TYPES).optional().describe("Principal type"),
|
|
72
|
+
attestationBlindId: z.string().optional().describe("Rotating pseudonym the counterparty sees"),
|
|
73
|
+
attestationIssuedAt: z.number().optional().describe("Attestation issuedAt (unix seconds)"),
|
|
74
|
+
attestationExpiresAt: z.number().optional().describe("Attestation expiry (unix seconds)"),
|
|
75
|
+
attestationProof: z.string().optional().describe("Opaque attestation proof verified by gateway"),
|
|
76
|
+
minCounterpartyTier: z.enum(TIERS).optional().describe("Minimum KYC tier the counterparty must attest to"),
|
|
77
|
+
agentInstanceId: z.string().optional().describe("Agent instance ID"),
|
|
78
|
+
agentInstanceVersion: z.string().optional().describe("Agent software version"),
|
|
79
|
+
agentInstanceStrategy: z.string().optional().describe("Strategy label"),
|
|
80
|
+
}, async (params) => {
|
|
81
|
+
try {
|
|
82
|
+
const client = getClient();
|
|
83
|
+
const result = await client.request("/v1/intents", { method: "POST", body: JSON.stringify(params) });
|
|
84
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
88
|
+
return { content: [{ type: "text", text: `Error creating intent: ${msg}` }], isError: true };
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
server.tool("commit_intent", "Create an off-chain commitment from an intent. Returns commitment hash and solver proof with selective disclosure.", {
|
|
92
|
+
intent: z.string().describe("Intent JSON string to commit"),
|
|
93
|
+
hideAmounts: z.boolean().default(false).describe("Hide amounts from solver proof"),
|
|
94
|
+
hideRingParties: z.boolean().default(false).describe("Strip ring settlement party list from solver proof"),
|
|
95
|
+
hideIdentity: z.boolean().default(false).describe("Strip principal blindId from solver proof"),
|
|
96
|
+
revealOnMatch: z.boolean().default(true).describe("Reveal full intent when matched (set false for sealed bid)"),
|
|
97
|
+
hideCounterparty: z.boolean().optional().describe("DEPRECATED alias for hideRingParties"),
|
|
98
|
+
}, async (params) => {
|
|
99
|
+
try {
|
|
100
|
+
const client = getClient();
|
|
101
|
+
const result = await client.request("/v1/intents/commit", { method: "POST", body: JSON.stringify(params) });
|
|
102
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
106
|
+
return { content: [{ type: "text", text: `Error committing intent: ${msg}` }], isError: true };
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
server.tool("explain_intent", "Generate a human-readable explanation of a HashLockIntent.", {
|
|
110
|
+
intent: z.string().describe("Intent JSON string to explain"),
|
|
111
|
+
}, async (params) => {
|
|
112
|
+
try {
|
|
113
|
+
const client = getClient();
|
|
114
|
+
const result = await client.request("/v1/intents/explain", { method: "POST", body: JSON.stringify(params) });
|
|
115
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
119
|
+
return { content: [{ type: "text", text: `Error explaining intent: ${msg}` }], isError: true };
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
server.tool("parse_natural_language", "Parse natural language text into a HashLockIntent. Supports Turkish and English.", {
|
|
123
|
+
text: z.string().describe("Natural language trading intent"),
|
|
124
|
+
chainId: z.number().optional().describe("Default chain ID (defaults to 1 = Ethereum)"),
|
|
125
|
+
}, async (params) => {
|
|
126
|
+
try {
|
|
127
|
+
const client = getClient();
|
|
128
|
+
const result = await client.request("/v1/intents/parse", { method: "POST", body: JSON.stringify(params) });
|
|
129
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
133
|
+
return { content: [{ type: "text", text: `Error parsing natural language: ${msg}` }], isError: true };
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
server.tool("validate_intent", "Validate a HashLockIntent against schema and business rules.", {
|
|
137
|
+
intent: z.string().describe("Intent JSON string to validate"),
|
|
138
|
+
}, async (params) => {
|
|
139
|
+
try {
|
|
140
|
+
const client = getClient();
|
|
141
|
+
const result = await client.request("/v1/intents/validate", { method: "POST", body: JSON.stringify(params) });
|
|
142
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
146
|
+
return { content: [{ type: "text", text: `Error validating intent: ${msg}` }], isError: true };
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
async function main() {
|
|
150
|
+
const transport = new StdioServerTransport();
|
|
151
|
+
await server.connect(transport);
|
|
152
|
+
console.error("Hashlock MCP server running on stdio");
|
|
153
|
+
}
|
|
154
|
+
main().catch((err) => {
|
|
155
|
+
console.error("Fatal error:", err);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
});
|
|
158
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hashlock-mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for Hashlock intent protocol — create, commit, validate, explain, and parse trading intents with attestation-based counterparty verification",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Hashlock Technologies",
|
|
7
|
+
"mcpName": "io.github.hashlock-tech/hashlock",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/Hashlock-Tech/hashlock-mcp-server"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"bin": {
|
|
15
|
+
"hashlock-mcp-server": "dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"start": "node dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.6.1",
|
|
26
|
+
"zod": "^3.23.8"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^20.11.0",
|
|
30
|
+
"typescript": "^5.3.3"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.0.0"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"mcp",
|
|
37
|
+
"hashlock",
|
|
38
|
+
"intent",
|
|
39
|
+
"defi",
|
|
40
|
+
"trading",
|
|
41
|
+
"attestation",
|
|
42
|
+
"kyc",
|
|
43
|
+
"ethereum"
|
|
44
|
+
]
|
|
45
|
+
}
|