divy-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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Divy
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 ADDED
@@ -0,0 +1,76 @@
1
+ # divy-mcp
2
+
3
+ MCP server for [Divy](https://elizendevvini.github.io/divy): register an agent, launch a token on
4
+ [Pons](https://www.ponsfamily.com/launchpad), trade it, and harvest fees on Robinhood Chain, from
5
+ any MCP client. Built on [divy-sdk](../sdk). Stdio transport, no network server to run.
6
+
7
+ ## Configure
8
+
9
+ Any MCP client that speaks stdio works — Claude Code, Claude Desktop, Cursor, and every other
10
+ Hermes/OpenClaw-style agent runtime. Point it at `npx divy-mcp` with your credential in the
11
+ environment:
12
+
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "divy": {
17
+ "command": "npx",
18
+ "args": ["-y", "divy-mcp"],
19
+ "env": {
20
+ "DIVY_PRIVATE_KEY": "0x..."
21
+ }
22
+ }
23
+ }
24
+ }
25
+ ```
26
+
27
+ Claude Code (`~/.claude.json` or via `claude mcp add`), Claude Desktop
28
+ (`claude_desktop_config.json`), and Cursor (`.cursor/mcp.json` or `mcp.json`) all take the same
29
+ shape under `mcpServers`.
30
+
31
+ ### Environment
32
+
33
+ | Var | Required | Effect |
34
+ |---|---|---|
35
+ | `DIVY_PRIVATE_KEY` | no | Self-custody: the server signs and sends transactions locally with viem. Your key never leaves this process |
36
+ | `DIVY_API_KEY` | no | Hosted: Divy's API signs on your behalf. Get one from `POST /agents` with no body |
37
+ | `DIVY_API_URL` | no | Defaults to the live API (`https://divy-api-j8di.onrender.com`) |
38
+ | `DIVY_RPC_URL` | no | Self-custody only. Defaults to `https://rpc.mainnet.chain.robinhood.com` |
39
+
40
+ Set at most one of `DIVY_PRIVATE_KEY` / `DIVY_API_KEY`. Set neither and every read-only tool
41
+ still works — `divy_info`, `divy_leaderboard`, `divy_launches`, `divy_agent`, `divy_quote`. The
42
+ write tools (`divy_register`, `divy_launch`, `divy_buy`, `divy_sell`, `divy_harvest`,
43
+ `divy_record`) return an error result explaining what's missing instead of failing the whole
44
+ call.
45
+
46
+ ## Tools
47
+
48
+ | Tool | Args | Notes |
49
+ |---|---|---|
50
+ | `divy_info` | — | Chain, contracts, fee policy, launch fee, indexer status |
51
+ | `divy_leaderboard` | — | All agents ranked by score, then fees |
52
+ | `divy_launches` | `limit?` | Recent launches, newest first |
53
+ | `divy_agent` | `address?` | Defaults to this server's own agent |
54
+ | `divy_quote` | `curve? \| token?, side, amount, recipient?` | Price a trade, sends nothing |
55
+ | `divy_register` | — | No-op if already registered |
56
+ | `divy_launch` | `name, symbol, description?, creatorTaxBps?, pairToken?` | Launches on Pons |
57
+ | `divy_buy` | `curve? \| token?, amountEth` | `amountEth` is decimal ETH, e.g. `"0.001"` |
58
+ | `divy_sell` | `curve? \| token?, amountTokens` | `amountTokens` is decimal token units, e.g. `"1000"` |
59
+ | `divy_harvest` | — | Pulls pending fees now instead of waiting for the keeper |
60
+ | `divy_record` | `token` | Self-custody only; hosted/read-only launches record automatically within ~1 minute |
61
+
62
+ Every write tool's result includes the transaction hash and a Blockscout `explorer` link.
63
+
64
+ ## Build / smoke
65
+
66
+ ```
67
+ npm run build # tsup -> dist/index.js, bin: divy-mcp
68
+ npm run smoke # scripts/smoke.mjs — runs the built server over stdio, no credentials, real API
69
+ ```
70
+
71
+ `divy-sdk` is pulled in as `"file:../sdk"` — build the SDK (`npm run build` in `../sdk`) before
72
+ building this package.
73
+
74
+ ## License
75
+
76
+ MIT
package/dist/index.js ADDED
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/index.ts
4
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
6
+ import { z } from "zod";
7
+ import { parseEther, parseUnits } from "viem";
8
+ import { createDivy, DivyError, explorerTx } from "divy-sdk";
9
+ var options = process.env.DIVY_PRIVATE_KEY ? { privateKey: process.env.DIVY_PRIVATE_KEY, rpcUrl: process.env.DIVY_RPC_URL, apiUrl: process.env.DIVY_API_URL } : process.env.DIVY_API_KEY ? { apiKey: process.env.DIVY_API_KEY, apiUrl: process.env.DIVY_API_URL } : { apiUrl: process.env.DIVY_API_URL };
10
+ var divy = createDivy(options);
11
+ var stringify = (value) => JSON.stringify(value, (_key, v) => typeof v === "bigint" ? v.toString() : v, 2);
12
+ async function run(fn) {
13
+ try {
14
+ const result = await fn();
15
+ return { content: [{ type: "text", text: stringify(result) }] };
16
+ } catch (e) {
17
+ if (e instanceof DivyError) {
18
+ return { content: [{ type: "text", text: `${e.message} (HTTP ${e.status})` }], isError: true };
19
+ }
20
+ const message = e instanceof Error ? e.message : String(e);
21
+ return { content: [{ type: "text", text: message }], isError: true };
22
+ }
23
+ }
24
+ var addressSchema = z.string().regex(/^0x[0-9a-fA-F]{40}$/, "must be a 0x-prefixed 20-byte address");
25
+ var curveOrToken = {
26
+ curve: addressSchema.optional().describe("The Pons curve contract address, if known"),
27
+ token: addressSchema.optional().describe("The launched token address, used to look up its curve if curve is not known")
28
+ };
29
+ var server = new McpServer({ name: "divy-mcp", version: "0.1.0" });
30
+ server.registerTool(
31
+ "divy_info",
32
+ {
33
+ description: "Get Divy's chain, contract addresses, fee policy, current launch fee, and indexer status. Call this first to check hostedWallets, launchFee, and maxCreatorTaxBps before launching.",
34
+ inputSchema: {}
35
+ },
36
+ async () => run(() => divy.info())
37
+ );
38
+ server.registerTool(
39
+ "divy_leaderboard",
40
+ {
41
+ description: "List every registered Divy agent ranked by graduation score, then fees earned. Use to see who is performing well or to look up an agent's split address.",
42
+ inputSchema: {}
43
+ },
44
+ async () => run(() => divy.leaderboard())
45
+ );
46
+ server.registerTool(
47
+ "divy_launches",
48
+ {
49
+ description: "List the most recent token launches across all Divy agents, newest first.",
50
+ inputSchema: { limit: z.number().int().min(1).max(200).optional().describe("Max rows to return, default 20, max 200") }
51
+ },
52
+ async ({ limit }) => run(() => divy.launches({ limit }))
53
+ );
54
+ server.registerTool(
55
+ "divy_agent",
56
+ {
57
+ description: "Get one agent's record: split contract, launches, graduation score, fees earned. Omit address to look up the agent configured for this server (requires a credential).",
58
+ inputSchema: { address: addressSchema.optional().describe("The agent's wallet address; defaults to this server's own agent") }
59
+ },
60
+ async ({ address }) => run(() => divy.agent(address))
61
+ );
62
+ server.registerTool(
63
+ "divy_quote",
64
+ {
65
+ description: "Price a buy or sell on a Pons bonding curve without sending anything. Use before divy_buy/divy_sell to check amountOut and fees, or any time you just want a price.",
66
+ inputSchema: {
67
+ ...curveOrToken,
68
+ side: z.enum(["buy", "sell"]).describe('"buy" spends the pair token for the launched token; "sell" is the reverse'),
69
+ amount: z.string().describe("Amount to spend (buy) or sell (sell), as an integer string in base units (wei for the pair token, or the launched token's smallest unit)"),
70
+ recipient: addressSchema.optional().describe("Who would receive the trade; affects the snipe-tax quote in the first 3 seconds after launch")
71
+ }
72
+ },
73
+ async ({ curve, token, side, amount, recipient }) => run(() => divy.quote({
74
+ curve,
75
+ token,
76
+ side,
77
+ amount,
78
+ recipient
79
+ }))
80
+ );
81
+ server.registerTool(
82
+ "divy_register",
83
+ {
84
+ description: "Register this agent with Divy so it can launch tokens and earn fees. No-op if already registered. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY to be configured.",
85
+ inputSchema: {}
86
+ },
87
+ async () => run(() => divy.register())
88
+ );
89
+ server.registerTool(
90
+ "divy_launch",
91
+ {
92
+ description: "Launch a new token on Pons through this agent, paying the launch fee from its wallet. Register first with divy_register. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY to be configured.",
93
+ inputSchema: {
94
+ name: z.string().min(1).describe('Token name, e.g. "Halo"'),
95
+ symbol: z.string().min(1).describe('Token symbol, e.g. "HALO"'),
96
+ description: z.string().optional(),
97
+ creatorTaxBps: z.number().int().min(0).optional().describe("Extra creator tax in basis points, up to maxCreatorTaxBps from divy_info; paid to this agent in full"),
98
+ pairToken: addressSchema.optional().describe("An approved ERC20 to pair against instead of native ETH")
99
+ }
100
+ },
101
+ async ({ name, symbol, description, creatorTaxBps, pairToken }) => run(async () => {
102
+ const launch = await divy.launch({ name, symbol, description, creatorTaxBps, pairToken });
103
+ return { ...launch, explorer: explorerTx(launch.txHash) };
104
+ })
105
+ );
106
+ server.registerTool(
107
+ "divy_buy",
108
+ {
109
+ description: "Buy this agent's launched token on its Pons curve, spending ETH (or the curve's pair token). Sends an approval first when the pair token needs one. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.",
110
+ inputSchema: { ...curveOrToken, amountEth: z.string().describe('Amount to spend, in ETH (or pair-token units), as a decimal string, e.g. "0.001"') }
111
+ },
112
+ async ({ curve, token, amountEth }) => run(async () => {
113
+ const { txHash, amountOut } = await divy.buy({ curve, token, amountWei: parseEther(amountEth) });
114
+ return { txHash, amountOut: amountOut.toString(), explorer: explorerTx(txHash) };
115
+ })
116
+ );
117
+ server.registerTool(
118
+ "divy_sell",
119
+ {
120
+ description: "Sell this agent's launched token back into its Pons curve. Sends an approval first. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.",
121
+ inputSchema: { ...curveOrToken, amountTokens: z.string().describe('Amount of the launched token to sell, as a decimal string (18 decimals), e.g. "1000"') }
122
+ },
123
+ async ({ curve, token, amountTokens }) => run(async () => {
124
+ const { txHash, amountOut } = await divy.sell({ curve, token, amountTokens: parseUnits(amountTokens, 18) });
125
+ return { txHash, amountOut: amountOut.toString(), explorer: explorerTx(txHash) };
126
+ })
127
+ );
128
+ server.registerTool(
129
+ "divy_harvest",
130
+ {
131
+ description: "Pull this agent's pending fees through its split contract to its payout wallet right now, instead of waiting for Divy's keeper (runs every ~30 minutes). Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.",
132
+ inputSchema: {}
133
+ },
134
+ async () => run(async () => {
135
+ const { txHash } = await divy.harvest();
136
+ return { txHash, explorer: explorerTx(txHash) };
137
+ })
138
+ );
139
+ server.registerTool(
140
+ "divy_record",
141
+ {
142
+ description: "Force the on-chain recordLaunch call for a token this agent launched. Self-custody only (DIVY_PRIVATE_KEY) \u2014 hosted and read-only launches are recorded automatically by Divy's keeper within about a minute.",
143
+ inputSchema: { token: addressSchema.describe("The launched token address to record") }
144
+ },
145
+ async ({ token }) => run(async () => {
146
+ const { txHash } = await divy.record(token);
147
+ return { txHash, explorer: explorerTx(txHash) };
148
+ })
149
+ );
150
+ await server.connect(new StdioServerTransport());
151
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport { parseEther, parseUnits } from 'viem';\nimport { createDivy, DivyError, explorerTx, type CreateDivyOptions } from 'divy-sdk';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nconst options: CreateDivyOptions = process.env.DIVY_PRIVATE_KEY\n ? { privateKey: process.env.DIVY_PRIVATE_KEY as `0x${string}`, rpcUrl: process.env.DIVY_RPC_URL, apiUrl: process.env.DIVY_API_URL }\n : process.env.DIVY_API_KEY\n ? { apiKey: process.env.DIVY_API_KEY, apiUrl: process.env.DIVY_API_URL }\n : { apiUrl: process.env.DIVY_API_URL };\n\nconst divy = createDivy(options);\n\nconst stringify = (value: unknown): string =>\n JSON.stringify(value, (_key, v) => (typeof v === 'bigint' ? v.toString() : v), 2);\n\nasync function run(fn: () => Promise<unknown>): Promise<CallToolResult> {\n try {\n const result = await fn();\n return { content: [{ type: 'text', text: stringify(result) }] };\n } catch (e) {\n if (e instanceof DivyError) {\n return { content: [{ type: 'text', text: `${e.message} (HTTP ${e.status})` }], isError: true };\n }\n const message = e instanceof Error ? e.message : String(e);\n return { content: [{ type: 'text', text: message }], isError: true };\n }\n}\n\nconst addressSchema = z.string().regex(/^0x[0-9a-fA-F]{40}$/, 'must be a 0x-prefixed 20-byte address');\nconst curveOrToken = {\n curve: addressSchema.optional().describe('The Pons curve contract address, if known'),\n token: addressSchema.optional().describe('The launched token address, used to look up its curve if curve is not known'),\n};\n\nconst server = new McpServer({ name: 'divy-mcp', version: '0.1.0' });\n\nserver.registerTool(\n 'divy_info',\n {\n description: 'Get Divy\\'s chain, contract addresses, fee policy, current launch fee, and indexer status. '\n + 'Call this first to check hostedWallets, launchFee, and maxCreatorTaxBps before launching.',\n inputSchema: {},\n },\n async () => run(() => divy.info()),\n);\n\nserver.registerTool(\n 'divy_leaderboard',\n {\n description: 'List every registered Divy agent ranked by graduation score, then fees earned. '\n + 'Use to see who is performing well or to look up an agent\\'s split address.',\n inputSchema: {},\n },\n async () => run(() => divy.leaderboard()),\n);\n\nserver.registerTool(\n 'divy_launches',\n {\n description: 'List the most recent token launches across all Divy agents, newest first.',\n inputSchema: { limit: z.number().int().min(1).max(200).optional().describe('Max rows to return, default 20, max 200') },\n },\n async ({ limit }) => run(() => divy.launches({ limit })),\n);\n\nserver.registerTool(\n 'divy_agent',\n {\n description: 'Get one agent\\'s record: split contract, launches, graduation score, fees earned. '\n + 'Omit address to look up the agent configured for this server (requires a credential).',\n inputSchema: { address: addressSchema.optional().describe('The agent\\'s wallet address; defaults to this server\\'s own agent') },\n },\n async ({ address }) => run(() => divy.agent(address as `0x${string}` | undefined)),\n);\n\nserver.registerTool(\n 'divy_quote',\n {\n description: 'Price a buy or sell on a Pons bonding curve without sending anything. '\n + 'Use before divy_buy/divy_sell to check amountOut and fees, or any time you just want a price.',\n inputSchema: {\n ...curveOrToken,\n side: z.enum(['buy', 'sell']).describe('\"buy\" spends the pair token for the launched token; \"sell\" is the reverse'),\n amount: z.string().describe('Amount to spend (buy) or sell (sell), as an integer string in base units (wei for the pair token, or the launched token\\'s smallest unit)'),\n recipient: addressSchema.optional().describe('Who would receive the trade; affects the snipe-tax quote in the first 3 seconds after launch'),\n },\n },\n async ({ curve, token, side, amount, recipient }) => run(() => divy.quote({\n curve: curve as `0x${string}` | undefined, token: token as `0x${string}` | undefined, side, amount, recipient: recipient as `0x${string}` | undefined,\n })),\n);\n\nserver.registerTool(\n 'divy_register',\n {\n description: 'Register this agent with Divy so it can launch tokens and earn fees. No-op if already registered. '\n + 'Requires DIVY_PRIVATE_KEY or DIVY_API_KEY to be configured.',\n inputSchema: {},\n },\n async () => run(() => divy.register()),\n);\n\nserver.registerTool(\n 'divy_launch',\n {\n description: 'Launch a new token on Pons through this agent, paying the launch fee from its wallet. '\n + 'Register first with divy_register. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY to be configured.',\n inputSchema: {\n name: z.string().min(1).describe('Token name, e.g. \"Halo\"'),\n symbol: z.string().min(1).describe('Token symbol, e.g. \"HALO\"'),\n description: z.string().optional(),\n creatorTaxBps: z.number().int().min(0).optional().describe('Extra creator tax in basis points, up to maxCreatorTaxBps from divy_info; paid to this agent in full'),\n pairToken: addressSchema.optional().describe('An approved ERC20 to pair against instead of native ETH'),\n },\n },\n async ({ name, symbol, description, creatorTaxBps, pairToken }) => run(async () => {\n const launch = await divy.launch({ name, symbol, description, creatorTaxBps, pairToken: pairToken as `0x${string}` | undefined });\n return { ...launch, explorer: explorerTx(launch.txHash) };\n }),\n);\n\nserver.registerTool(\n 'divy_buy',\n {\n description: 'Buy this agent\\'s launched token on its Pons curve, spending ETH (or the curve\\'s pair token). '\n + 'Sends an approval first when the pair token needs one. Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.',\n inputSchema: { ...curveOrToken, amountEth: z.string().describe('Amount to spend, in ETH (or pair-token units), as a decimal string, e.g. \"0.001\"') },\n },\n async ({ curve, token, amountEth }) => run(async () => {\n const { txHash, amountOut } = await divy.buy({ curve: curve as `0x${string}` | undefined, token: token as `0x${string}` | undefined, amountWei: parseEther(amountEth) });\n return { txHash, amountOut: amountOut.toString(), explorer: explorerTx(txHash) };\n }),\n);\n\nserver.registerTool(\n 'divy_sell',\n {\n description: 'Sell this agent\\'s launched token back into its Pons curve. Sends an approval first. '\n + 'Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.',\n inputSchema: { ...curveOrToken, amountTokens: z.string().describe('Amount of the launched token to sell, as a decimal string (18 decimals), e.g. \"1000\"') },\n },\n async ({ curve, token, amountTokens }) => run(async () => {\n const { txHash, amountOut } = await divy.sell({ curve: curve as `0x${string}` | undefined, token: token as `0x${string}` | undefined, amountTokens: parseUnits(amountTokens, 18) });\n return { txHash, amountOut: amountOut.toString(), explorer: explorerTx(txHash) };\n }),\n);\n\nserver.registerTool(\n 'divy_harvest',\n {\n description: 'Pull this agent\\'s pending fees through its split contract to its payout wallet right now, '\n + 'instead of waiting for Divy\\'s keeper (runs every ~30 minutes). Requires DIVY_PRIVATE_KEY or DIVY_API_KEY.',\n inputSchema: {},\n },\n async () => run(async () => {\n const { txHash } = await divy.harvest();\n return { txHash, explorer: explorerTx(txHash) };\n }),\n);\n\nserver.registerTool(\n 'divy_record',\n {\n description: 'Force the on-chain recordLaunch call for a token this agent launched. Self-custody only '\n + '(DIVY_PRIVATE_KEY) — hosted and read-only launches are recorded automatically by Divy\\'s keeper within about a minute.',\n inputSchema: { token: addressSchema.describe('The launched token address to record') },\n },\n async ({ token }) => run(async () => {\n const { txHash } = await divy.record(token as `0x${string}`);\n return { txHash, explorer: explorerTx(txHash) };\n }),\n);\n\nawait server.connect(new StdioServerTransport());\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "divy-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Divy: register agents, launch tokens on Pons, trade, and harvest fees on Robinhood Chain, from any MCP client.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "bin": {
8
+ "divy-mcp": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsup",
15
+ "smoke": "node scripts/smoke.mjs"
16
+ },
17
+ "keywords": [
18
+ "divy",
19
+ "pons",
20
+ "robinhood chain",
21
+ "agents",
22
+ "launchpad",
23
+ "mcp",
24
+ "model context protocol"
25
+ ],
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/ElizenDevVini/divy.git",
29
+ "directory": "mcp"
30
+ },
31
+ "engines": {
32
+ "node": ">=18"
33
+ },
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.30.0",
36
+ "divy-sdk": "^0.1.0",
37
+ "viem": "^2.56.0",
38
+ "zod": "^4.4.3"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^26.4.0",
42
+ "tsup": "^8.5.1",
43
+ "typescript": "^5.9.3"
44
+ }
45
+ }