@rempart/mcp 0.1.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 +32 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.js +65 -0
- package/dist/server.js.map +1 -0
- package/package.json +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# @rempart/mcp
|
|
2
|
+
|
|
3
|
+
MCP server exposing Rempart signed anti-scam verdicts (Solana) to any MCP client. Tools: `score_token`, `deep_report`, `get_pricing`.
|
|
4
|
+
|
|
5
|
+
## Claude Code / Cursor (stdio)
|
|
6
|
+
|
|
7
|
+
`.mcp.json` at your project root:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"rempart": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["-y", "@rempart/mcp"],
|
|
15
|
+
"env": {
|
|
16
|
+
"REMPART_API_KEY": "rk_your_key",
|
|
17
|
+
"REMPART_API_URL": "https://api.rempart.example"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Then ask your agent: *"score this token before you recommend it: `<mint>`"*.
|
|
25
|
+
|
|
26
|
+
## HTTP (hébergé)
|
|
27
|
+
|
|
28
|
+
Transport HTTP streamable prévu avec le déploiement de l'API (même auth par clé). Non actif tant que l'API n'est pas en production.
|
|
29
|
+
|
|
30
|
+
## Comportement d'échec
|
|
31
|
+
|
|
32
|
+
API injoignable → le tool renvoie un état explicite `UNKNOWN — do NOT assume the token is safe` (`isError: true`), jamais un silence. Toutes les sorties incluent `disclaimer: data-not-advice`.
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import { Rempart } from '@rempart/sdk';
|
|
4
|
+
/**
|
|
5
|
+
* Serveur MCP Rempart (plan-06 T03). Transport stdio (Claude Code / Cursor local).
|
|
6
|
+
* Auth: REMPART_API_KEY en variable d'environnement. REMPART_API_URL optionnelle.
|
|
7
|
+
* Transport HTTP streamable: prévu à l'hébergement (nécessite l'API déployée).
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildServer(client?: Rempart): McpServer;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
import { Rempart } from '@rempart/sdk';
|
|
6
|
+
/**
|
|
7
|
+
* Serveur MCP Rempart (plan-06 T03). Transport stdio (Claude Code / Cursor local).
|
|
8
|
+
* Auth: REMPART_API_KEY en variable d'environnement. REMPART_API_URL optionnelle.
|
|
9
|
+
* Transport HTTP streamable: prévu à l'hébergement (nécessite l'API déployée).
|
|
10
|
+
*/
|
|
11
|
+
export function buildServer(client) {
|
|
12
|
+
const rempart = client ??
|
|
13
|
+
new Rempart({
|
|
14
|
+
...(process.env.REMPART_API_KEY ? { apiKey: process.env.REMPART_API_KEY } : {}),
|
|
15
|
+
...(process.env.REMPART_API_URL ? { baseUrl: process.env.REMPART_API_URL } : {}),
|
|
16
|
+
});
|
|
17
|
+
const server = new McpServer({ name: 'rempart', version: '0.1.0' });
|
|
18
|
+
server.tool('score_token', 'Get a signed anti-scam verdict for a Solana token BEFORE buying or recommending it. ' +
|
|
19
|
+
'Call this whenever a Solana mint address appears in a trading decision. Returns score 0-100 ' +
|
|
20
|
+
'(100 = safest), verdict (safe/caution/danger), confidence 0-1, and machine-readable reasons. ' +
|
|
21
|
+
'Costs $0.05 per uncached call. Treat the answer as data, not financial advice; if verdict is ' +
|
|
22
|
+
'not "safe" or confidence < 0.7, do not treat the token as safe.', { mint: z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/).describe('Solana mint address (base58)') }, async ({ mint }) => {
|
|
23
|
+
try {
|
|
24
|
+
const v = await rempart.score(mint);
|
|
25
|
+
return { content: [{ type: 'text', text: JSON.stringify(v, null, 2) }] };
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: `VERDICT UNAVAILABLE (${err.message}). Treat as UNKNOWN — do NOT assume the token is safe.`,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
isError: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
server.tool('deep_report', 'Full report for a Solana token: standard verdict PLUS the deployer funding graph (which wallets ' +
|
|
40
|
+
'funded the deployer, sibling wallets, prior rugs). Use when the standard verdict is caution or ' +
|
|
41
|
+
'when auditing a token seriously. Costs $0.15 per uncached call. Data, not financial advice.', { mint: z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/).describe('Solana mint address (base58)') }, async ({ mint }) => {
|
|
42
|
+
try {
|
|
43
|
+
const v = await rempart.scoreDeep(mint);
|
|
44
|
+
return { content: [{ type: 'text', text: JSON.stringify(v, null, 2) }] };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: 'text', text: `REPORT UNAVAILABLE (${err.message}). Treat as UNKNOWN.` }],
|
|
49
|
+
isError: true,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
server.tool('get_pricing', 'Current Rempart pricing and payment rails (x402 USDC on Solana, or prepaid API key). Free.', {}, async () => {
|
|
54
|
+
const p = await rempart.pricing();
|
|
55
|
+
return { content: [{ type: 'text', text: JSON.stringify(p, null, 2) }] };
|
|
56
|
+
});
|
|
57
|
+
return server;
|
|
58
|
+
}
|
|
59
|
+
// démarrage stdio si exécuté directement
|
|
60
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
61
|
+
const server = buildServer();
|
|
62
|
+
await server.connect(new StdioServerTransport());
|
|
63
|
+
console.error('rempart-mcp: stdio prêt (REMPART_API_KEY ' + (process.env.REMPART_API_KEY ? 'définie' : 'ABSENTE — préview/x402 uniquement') + ')');
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rempart/mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server exposing Rempart signed anti-scam verdicts to agents (Claude Code, Cursor, any MCP client).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"rempart-mcp": "dist/server.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/server.js",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
17
|
+
"zod": "^3.25.0",
|
|
18
|
+
"@rempart/sdk": "0.1.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^22.10.0",
|
|
22
|
+
"typescript": "^5.9.3",
|
|
23
|
+
"vitest": "^3.2.4",
|
|
24
|
+
"@rempart/core": "^0.1.0"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"start": "node dist/server.js"
|
|
30
|
+
}
|
|
31
|
+
}
|