bostrom-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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/clients/graphql.d.ts +1 -0
  3. package/dist/clients/graphql.js +17 -0
  4. package/dist/clients/graphql.js.map +1 -0
  5. package/dist/clients/ipfs.d.ts +1 -0
  6. package/dist/clients/ipfs.js +15 -0
  7. package/dist/clients/ipfs.js.map +1 -0
  8. package/dist/clients/lcd.d.ts +2 -0
  9. package/dist/clients/lcd.js +14 -0
  10. package/dist/clients/lcd.js.map +1 -0
  11. package/dist/clients/rpc.d.ts +1 -0
  12. package/dist/clients/rpc.js +10 -0
  13. package/dist/clients/rpc.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.js +26 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/services/economy.d.ts +41 -0
  18. package/dist/services/economy.js +64 -0
  19. package/dist/services/economy.js.map +1 -0
  20. package/dist/services/governance.d.ts +24 -0
  21. package/dist/services/governance.js +50 -0
  22. package/dist/services/governance.js.map +1 -0
  23. package/dist/services/graph.d.ts +30 -0
  24. package/dist/services/graph.js +62 -0
  25. package/dist/services/graph.js.map +1 -0
  26. package/dist/services/infra.d.ts +34 -0
  27. package/dist/services/infra.js +45 -0
  28. package/dist/services/infra.js.map +1 -0
  29. package/dist/services/lithium.d.ts +55 -0
  30. package/dist/services/lithium.js +146 -0
  31. package/dist/services/lithium.js.map +1 -0
  32. package/dist/tools/economy.d.ts +2 -0
  33. package/dist/tools/economy.js +39 -0
  34. package/dist/tools/economy.js.map +1 -0
  35. package/dist/tools/governance.d.ts +2 -0
  36. package/dist/tools/governance.js +58 -0
  37. package/dist/tools/governance.js.map +1 -0
  38. package/dist/tools/graph.d.ts +2 -0
  39. package/dist/tools/graph.js +58 -0
  40. package/dist/tools/graph.js.map +1 -0
  41. package/dist/tools/infra.d.ts +2 -0
  42. package/dist/tools/infra.js +38 -0
  43. package/dist/tools/infra.js.map +1 -0
  44. package/dist/tools/lithium.d.ts +2 -0
  45. package/dist/tools/lithium.js +208 -0
  46. package/dist/tools/lithium.js.map +1 -0
  47. package/dist/util.d.ts +31 -0
  48. package/dist/util.js +72 -0
  49. package/dist/util.js.map +1 -0
  50. package/package.json +42 -0
@@ -0,0 +1,146 @@
1
+ import { lcdSmartQuery } from "../clients/lcd.js";
2
+ import { graphql } from "../clients/graphql.js";
3
+ // Litium modular contract addresses
4
+ export const LITIUM_CORE = "bostrom1wsgx32y0tx5rk6g89ffr8hg2wucnpwp650e9nrdm80jeyku5u4zq5ashgz";
5
+ export const LITIUM_MINE = "bostrom1vsfzcplds5z9xxl0llczeskxjxuddckksjm2u5ft2xt03qg28ups04mfes";
6
+ export const LITIUM_STAKE = "bostrom1z0s6rxw8eq4wy25kaucy5jydlphlpzpglsle5n7nx2gaqd60rmgqs67tnz";
7
+ export const LITIUM_REFER = "bostrom1m8a0jzyyu794cmd5clkt37kr0kkqvxyra23gnqcg5929n63ryhpss3986d";
8
+ // --- litium-core queries ---
9
+ export async function getCoreConfig(contract) {
10
+ return lcdSmartQuery(contract, { config: {} });
11
+ }
12
+ export async function getBurnStats(contract) {
13
+ return lcdSmartQuery(contract, { burn_stats: {} });
14
+ }
15
+ export async function getTotalMinted(contract) {
16
+ return lcdSmartQuery(contract, { total_minted: {} });
17
+ }
18
+ export async function isAuthorizedCaller(contract, address) {
19
+ return lcdSmartQuery(contract, { is_authorized_caller: { address } });
20
+ }
21
+ // --- litium-mine queries ---
22
+ export async function getMineConfig(contract) {
23
+ return lcdSmartQuery(contract, { config: {} });
24
+ }
25
+ export async function getSeed(contract) {
26
+ return lcdSmartQuery(contract, { seed: {} });
27
+ }
28
+ export async function getDifficulty(contract) {
29
+ return lcdSmartQuery(contract, { difficulty: {} });
30
+ }
31
+ export async function getEpochStatus(contract) {
32
+ return lcdSmartQuery(contract, { epoch_status: {} });
33
+ }
34
+ export async function getTarget(contract) {
35
+ return lcdSmartQuery(contract, { target: {} });
36
+ }
37
+ export async function getProofStats(contract) {
38
+ return lcdSmartQuery(contract, { proof_stats: {} });
39
+ }
40
+ export async function getLithiumEmissionInfo(contract) {
41
+ return lcdSmartQuery(contract, { lithium_emission_info: {} });
42
+ }
43
+ export async function getLithiumMinerEpochStats(contract, address, epochId) {
44
+ return lcdSmartQuery(contract, {
45
+ lithium_miner_epoch_stats: { address, epoch_id: epochId },
46
+ });
47
+ }
48
+ export async function getMineStats(contract) {
49
+ return lcdSmartQuery(contract, { stats: {} });
50
+ }
51
+ export async function getMinerStats(contract, address) {
52
+ return lcdSmartQuery(contract, { miner_stats: { address } });
53
+ }
54
+ export async function verifyProof(contract, hash, nonce, timestamp, miner) {
55
+ return lcdSmartQuery(contract, {
56
+ verify_proof: { hash, nonce, timestamp, miner },
57
+ });
58
+ }
59
+ export async function calculateReward(contract, difficultyBits) {
60
+ return lcdSmartQuery(contract, {
61
+ calculate_reward: { difficulty_bits: difficultyBits },
62
+ });
63
+ }
64
+ /** Composite: full mine contract state */
65
+ export async function getMineState(contract) {
66
+ const [config, seed, difficulty, stats, epochStatus, proofStats, emission] = await Promise.all([
67
+ lcdSmartQuery(contract, { config: {} }),
68
+ lcdSmartQuery(contract, { seed: {} }),
69
+ lcdSmartQuery(contract, { difficulty: {} }),
70
+ lcdSmartQuery(contract, { stats: {} }),
71
+ lcdSmartQuery(contract, { epoch_status: {} }),
72
+ lcdSmartQuery(contract, { proof_stats: {} }),
73
+ lcdSmartQuery(contract, { lithium_emission_info: {} }),
74
+ ]);
75
+ return { config, seed, difficulty, stats, epoch_status: epochStatus, proof_stats: proofStats, emission };
76
+ }
77
+ // --- litium-stake queries ---
78
+ export async function getStakeConfig(contract) {
79
+ return lcdSmartQuery(contract, { config: {} });
80
+ }
81
+ export async function getTotalStaked(contract) {
82
+ return lcdSmartQuery(contract, { total_staked: {} });
83
+ }
84
+ export async function getStakeInfo(contract, address) {
85
+ return lcdSmartQuery(contract, { stake_info: { address } });
86
+ }
87
+ export async function getStakingStats(contract) {
88
+ return lcdSmartQuery(contract, { staking_stats: {} });
89
+ }
90
+ // --- litium-refer queries ---
91
+ export async function getReferConfig(contract) {
92
+ return lcdSmartQuery(contract, { config: {} });
93
+ }
94
+ export async function getReferrerOf(contract, miner) {
95
+ return lcdSmartQuery(contract, { referrer_of: { miner } });
96
+ }
97
+ export async function getReferralInfo(contract, address) {
98
+ return lcdSmartQuery(contract, { referral_info: { address } });
99
+ }
100
+ export async function getCommunityPoolBalance(contract) {
101
+ return lcdSmartQuery(contract, { community_pool_balance: {} });
102
+ }
103
+ export async function getRecentProofs(contract, limit) {
104
+ const result = await graphql(`{
105
+ messages_by_address(
106
+ args: {
107
+ addresses: "{${contract}}",
108
+ types: "{cosmwasm.wasm.v1.MsgExecuteContract}"
109
+ },
110
+ limit: ${limit},
111
+ order_by: {transaction_hash: desc}
112
+ ) {
113
+ transaction_hash
114
+ value
115
+ transaction { block { height timestamp } success }
116
+ }
117
+ }`);
118
+ return result.messages_by_address;
119
+ }
120
+ export async function getMinerTxHistory(address, limit) {
121
+ const result = await graphql(`{
122
+ messages_by_address(
123
+ args: {
124
+ addresses: "{${address}}",
125
+ types: "{cosmwasm.wasm.v1.MsgExecuteContract}"
126
+ },
127
+ limit: ${limit},
128
+ order_by: {transaction_hash: desc}
129
+ ) {
130
+ transaction_hash
131
+ value
132
+ transaction { block { height timestamp } success }
133
+ }
134
+ messages_by_address_aggregate(
135
+ args: {
136
+ addresses: "{${address}}",
137
+ types: "{cosmwasm.wasm.v1.MsgExecuteContract}"
138
+ }
139
+ ) { aggregate { count } }
140
+ }`);
141
+ return {
142
+ total_txs: result.messages_by_address_aggregate.aggregate.count,
143
+ recent_txs: result.messages_by_address,
144
+ };
145
+ }
146
+ //# sourceMappingURL=lithium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lithium.js","sourceRoot":"","sources":["../../src/services/lithium.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerEconomyTools(server: McpServer): void;
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { ok, safe, READ_ONLY_ANNOTATIONS } from "../util.js";
3
+ import * as svc from "../services/economy.js";
4
+ export function registerEconomyTools(server) {
5
+ server.registerTool("economy_balances", {
6
+ description: "Get all token balances for an address (BOOT, HYDROGEN, VOLT, AMPERE, LI, etc.)",
7
+ inputSchema: {
8
+ address: z.string().describe("Bostrom address (bostrom1...)"),
9
+ },
10
+ annotations: READ_ONLY_ANNOTATIONS,
11
+ }, safe(async ({ address }) => ok(await svc.getBalances(address))));
12
+ server.registerTool("economy_supply", {
13
+ description: "Get total supply for a token denom. Use 'boot' for BOOT, full factory path for LI, etc.",
14
+ inputSchema: {
15
+ denom: z.string().describe("Token denom, e.g. 'boot', 'hydrogen', or full factory denom for LI"),
16
+ },
17
+ annotations: READ_ONLY_ANNOTATIONS,
18
+ }, safe(async ({ denom }) => ok(await svc.getSupply(denom))));
19
+ server.registerTool("economy_mint_price", {
20
+ description: "Get current Volt and Ampere mint prices (resources module)",
21
+ annotations: READ_ONLY_ANNOTATIONS,
22
+ }, safe(async () => ok(await svc.getMintPrice())));
23
+ server.registerTool("economy_staking", {
24
+ description: "Get staking info for an address: delegations, rewards, and unbonding",
25
+ inputSchema: {
26
+ address: z.string().describe("Delegator address (bostrom1...)"),
27
+ },
28
+ annotations: READ_ONLY_ANNOTATIONS,
29
+ }, safe(async ({ address }) => ok(await svc.getStaking(address))));
30
+ server.registerTool("economy_pools", {
31
+ description: "Get liquidity pool stats from the pools module",
32
+ annotations: READ_ONLY_ANNOTATIONS,
33
+ }, safe(async () => ok(await svc.getPools())));
34
+ server.registerTool("economy_inflation", {
35
+ description: "Get current inflation rate and minting parameters",
36
+ annotations: READ_ONLY_ANNOTATIONS,
37
+ }, safe(async () => ok(await svc.getInflation())));
38
+ }
39
+ //# sourceMappingURL=economy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"economy.js","sourceRoot":"","sources":["../../src/tools/economy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SAC9D;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,yFAAyF;QACtG,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SACjG;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAC/C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,sEAAsE;QACnF,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAChE;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAC/D,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAC3C,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGovernanceTools(server: McpServer): void;
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { ok, safe, paginationHint, READ_ONLY_ANNOTATIONS } from "../util.js";
3
+ import * as svc from "../services/governance.js";
4
+ export function registerGovernanceTools(server) {
5
+ server.registerTool("gov_proposals", {
6
+ description: "List governance proposals. Filter by status: active (voting), passed, rejected, or all.",
7
+ inputSchema: {
8
+ status: z
9
+ .enum([
10
+ "PROPOSAL_STATUS_VOTING_PERIOD",
11
+ "PROPOSAL_STATUS_PASSED",
12
+ "PROPOSAL_STATUS_REJECTED",
13
+ "PROPOSAL_STATUS_DEPOSIT_PERIOD",
14
+ "all",
15
+ ])
16
+ .default("all")
17
+ .describe("Filter by proposal status"),
18
+ limit: z.number().min(1).max(50).default(10),
19
+ },
20
+ annotations: READ_ONLY_ANNOTATIONS,
21
+ }, safe(async ({ status, limit }) => {
22
+ const proposals = await svc.getProposals(status, limit);
23
+ const pagination = paginationHint("gov_proposals", 0, limit, proposals);
24
+ return ok({ proposals, ...(pagination && { pagination }) });
25
+ }));
26
+ server.registerTool("gov_proposal_detail", {
27
+ description: "Get full proposal details including vote tally",
28
+ inputSchema: {
29
+ proposal_id: z.string().describe("Proposal ID number"),
30
+ },
31
+ annotations: READ_ONLY_ANNOTATIONS,
32
+ }, safe(async ({ proposal_id }) => ok(await svc.getProposalDetail(proposal_id))));
33
+ server.registerTool("gov_validators", {
34
+ description: "Get the active validator set with moniker, commission, and voting power",
35
+ inputSchema: {
36
+ status: z
37
+ .enum(["BOND_STATUS_BONDED", "BOND_STATUS_UNBONDED", "BOND_STATUS_UNBONDING"])
38
+ .default("BOND_STATUS_BONDED")
39
+ .describe("Validator bond status"),
40
+ limit: z.number().min(1).max(200).default(50),
41
+ },
42
+ annotations: READ_ONLY_ANNOTATIONS,
43
+ }, safe(async ({ status, limit }) => {
44
+ const validators = await svc.getValidators(status, limit);
45
+ const pagination = paginationHint("gov_validators", 0, limit, validators);
46
+ return ok({ validators, ...(pagination && { pagination }) });
47
+ }));
48
+ server.registerTool("gov_params", {
49
+ description: "Get chain parameters: staking, slashing, governance, distribution, or minting params",
50
+ inputSchema: {
51
+ module: z
52
+ .enum(["staking", "slashing", "gov", "distribution", "mint"])
53
+ .describe("Module to get params for"),
54
+ },
55
+ annotations: READ_ONLY_ANNOTATIONS,
56
+ }, safe(async ({ module }) => ok(await svc.getParams(module))));
57
+ }
58
+ //# sourceMappingURL=governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/tools/governance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGraphTools(server: McpServer): void;
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { ok, safe, paginationHint, READ_ONLY_ANNOTATIONS } from "../util.js";
3
+ import * as svc from "../services/graph.js";
4
+ export function registerGraphTools(server) {
5
+ server.registerTool("graph_search", {
6
+ description: "Search cyberlinks by particle CID or neuron address. Returns linked particles and their creators.",
7
+ inputSchema: {
8
+ particle: z.string().optional().describe("CID of a particle to find links from/to"),
9
+ neuron: z.string().optional().describe("Neuron address (bostrom1...) to find their links"),
10
+ limit: z.number().min(1).max(100).default(20).describe("Max results"),
11
+ offset: z.number().min(0).default(0).describe("Pagination offset"),
12
+ },
13
+ annotations: READ_ONLY_ANNOTATIONS,
14
+ }, safe(async ({ particle, neuron, limit, offset }) => {
15
+ const result = await svc.searchCyberlinks({ particle, neuron, limit, offset });
16
+ const pagination = paginationHint("graph_search", offset, limit, result.links);
17
+ return ok({ ...result, ...(pagination && { pagination }) });
18
+ }));
19
+ server.registerTool("graph_rank", {
20
+ description: "Get the cyberank score for a particle (CID). Higher rank = more important in the knowledge graph.",
21
+ inputSchema: {
22
+ particle: z.string().describe("CID of the particle"),
23
+ },
24
+ annotations: READ_ONLY_ANNOTATIONS,
25
+ }, safe(async ({ particle }) => ok(await svc.getRank(particle))));
26
+ server.registerTool("graph_neuron", {
27
+ description: "Get neuron profile: number of cyberlinks created",
28
+ inputSchema: {
29
+ address: z.string().describe("Neuron address (bostrom1...)"),
30
+ },
31
+ annotations: READ_ONLY_ANNOTATIONS,
32
+ }, safe(async ({ address }) => ok(await svc.getNeuron(address))));
33
+ server.registerTool("graph_particle", {
34
+ description: "Fetch particle content by CID from IPFS. Returns text content (truncated at 50KB).",
35
+ inputSchema: {
36
+ cid: z.string().describe("IPFS CID of the particle"),
37
+ },
38
+ annotations: READ_ONLY_ANNOTATIONS,
39
+ }, safe(async ({ cid }) => {
40
+ const content = await svc.getParticle(cid);
41
+ return { content: [{ type: "text", text: content }] };
42
+ }));
43
+ server.registerTool("graph_recent_links", {
44
+ description: "Get the most recent cyberlinks created on Bostrom",
45
+ inputSchema: {
46
+ limit: z.number().min(1).max(100).default(20).describe("Max results"),
47
+ },
48
+ annotations: READ_ONLY_ANNOTATIONS,
49
+ }, safe(async ({ limit }) => {
50
+ const links = await svc.getRecentLinks(limit);
51
+ return ok(links);
52
+ }));
53
+ server.registerTool("graph_stats", {
54
+ description: "Get knowledge graph statistics: total cyberlinks and active neurons",
55
+ annotations: READ_ONLY_ANNOTATIONS,
56
+ }, safe(async () => ok(await svc.getGraphStats())));
57
+ }
58
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/tools/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerInfraTools(server: McpServer): void;
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { ok, safe, paginationHint, READ_ONLY_ANNOTATIONS } from "../util.js";
3
+ import * as svc from "../services/infra.js";
4
+ export function registerInfraTools(server) {
5
+ server.registerTool("infra_chain_status", {
6
+ description: "Get current Bostrom chain status: latest block height, time, chain ID, sync status",
7
+ annotations: READ_ONLY_ANNOTATIONS,
8
+ }, safe(async () => ok(await svc.getChainStatus())));
9
+ server.registerTool("infra_tx_search", {
10
+ description: "Search transactions by sender address, contract address, or message type.",
11
+ inputSchema: {
12
+ sender: z.string().optional().describe("Filter by sender address (bostrom1...)"),
13
+ contract: z.string().optional().describe("Filter by contract address"),
14
+ message_type: z.string().optional().describe("Filter by message type, e.g. /cosmwasm.wasm.v1.MsgExecuteContract"),
15
+ limit: z.number().min(1).max(50).default(10).describe("Max results"),
16
+ offset: z.number().min(0).default(0).describe("Pagination offset"),
17
+ },
18
+ annotations: READ_ONLY_ANNOTATIONS,
19
+ }, safe(async ({ sender, contract, message_type, limit, offset }) => {
20
+ const result = await svc.searchTxs({
21
+ sender,
22
+ contract,
23
+ messageType: message_type,
24
+ limit,
25
+ offset,
26
+ });
27
+ const pagination = paginationHint("infra_tx_search", offset, limit, result.txs);
28
+ return ok({ ...result, ...(pagination && { pagination }) });
29
+ }));
30
+ server.registerTool("infra_tx_detail", {
31
+ description: "Get full decoded transaction by hash",
32
+ inputSchema: {
33
+ txhash: z.string().describe("Transaction hash"),
34
+ },
35
+ annotations: READ_ONLY_ANNOTATIONS,
36
+ }, safe(async ({ txhash }) => ok(await svc.getTxDetail(txhash))));
37
+ }
38
+ //# sourceMappingURL=infra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra.js","sourceRoot":"","sources":["../../src/tools/infra.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,KAAK,GAAG,MAAM,sBAAsB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CACjD,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YAChF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;YACjH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SACnE;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC;YACjC,MAAM;YACN,QAAQ;YACR,WAAW,EAAE,YAAY;YACzB,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAChF,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SAChD;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerLithiumTools(server: McpServer): void;
@@ -0,0 +1,208 @@
1
+ import { z } from "zod";
2
+ import { ok, safe, paginationHint, READ_ONLY_ANNOTATIONS } from "../util.js";
3
+ import * as svc from "../services/lithium.js";
4
+ import { LITIUM_CORE, LITIUM_MINE, LITIUM_STAKE, LITIUM_REFER, } from "../services/lithium.js";
5
+ export function registerLithiumTools(server) {
6
+ // ── litium-core ──────────────────────────────────────────────
7
+ server.registerTool("li_core_config", {
8
+ description: "Get litium-core config: token_denom, admin, paused",
9
+ inputSchema: {
10
+ contract: z.string().default(LITIUM_CORE).describe("litium-core contract address"),
11
+ },
12
+ annotations: READ_ONLY_ANNOTATIONS,
13
+ }, safe(async ({ contract }) => ok(await svc.getCoreConfig(contract))));
14
+ server.registerTool("li_burn_stats", {
15
+ description: "Get LI burn stats: total_burned via contract-mediated transfers",
16
+ inputSchema: {
17
+ contract: z.string().default(LITIUM_CORE).describe("litium-core contract address"),
18
+ },
19
+ annotations: READ_ONLY_ANNOTATIONS,
20
+ }, safe(async ({ contract }) => ok(await svc.getBurnStats(contract))));
21
+ server.registerTool("li_total_minted", {
22
+ description: "Get total LI minted and supply cap",
23
+ inputSchema: {
24
+ contract: z.string().default(LITIUM_CORE).describe("litium-core contract address"),
25
+ },
26
+ annotations: READ_ONLY_ANNOTATIONS,
27
+ }, safe(async ({ contract }) => ok(await svc.getTotalMinted(contract))));
28
+ // ── litium-mine ──────────────────────────────────────────────
29
+ server.registerTool("li_mine_state", {
30
+ description: "Get full litium-mine state: config, seed, difficulty, stats, epoch_status, proof_stats, emission breakdown",
31
+ inputSchema: {
32
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
33
+ },
34
+ annotations: READ_ONLY_ANNOTATIONS,
35
+ }, safe(async ({ contract }) => ok(await svc.getMineState(contract))));
36
+ server.registerTool("li_mine_config", {
37
+ description: "Get litium-mine config: difficulty, base_reward, alpha_permille, max_proof_age, period_duration, lithium_epoch_duration_blocks, target_proofs_per_window, estimated_gas_cost_uboot, core/stake/refer contracts",
38
+ inputSchema: {
39
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
40
+ },
41
+ annotations: READ_ONLY_ANNOTATIONS,
42
+ }, safe(async ({ contract }) => ok(await svc.getMineConfig(contract))));
43
+ server.registerTool("li_seed", {
44
+ description: "Get current mining seed and seed_interval",
45
+ inputSchema: {
46
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
47
+ },
48
+ annotations: READ_ONLY_ANNOTATIONS,
49
+ }, safe(async ({ contract }) => ok(await svc.getSeed(contract))));
50
+ server.registerTool("li_difficulty", {
51
+ description: "Get difficulty info: current, min_profitable, window_proof_count, window_total_work",
52
+ inputSchema: {
53
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
54
+ },
55
+ annotations: READ_ONLY_ANNOTATIONS,
56
+ }, safe(async ({ contract }) => ok(await svc.getDifficulty(contract))));
57
+ server.registerTool("li_epoch_status", {
58
+ description: "Get current Lithium epoch: epoch_id, start/end block heights, proof_count, target_solutions, difficulty",
59
+ inputSchema: {
60
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
61
+ },
62
+ annotations: READ_ONLY_ANNOTATIONS,
63
+ }, safe(async ({ contract }) => ok(await svc.getEpochStatus(contract))));
64
+ server.registerTool("li_proof_stats", {
65
+ description: "Get current epoch proof counters: epoch_id, proof_count, total_work",
66
+ inputSchema: {
67
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
68
+ },
69
+ annotations: READ_ONLY_ANNOTATIONS,
70
+ }, safe(async ({ contract }) => ok(await svc.getProofStats(contract))));
71
+ server.registerTool("li_emission", {
72
+ description: "Get Lithium emission breakdown: epoch_id, mining_emission, staking_emission, referral_emission, total_emission",
73
+ inputSchema: {
74
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
75
+ },
76
+ annotations: READ_ONLY_ANNOTATIONS,
77
+ }, safe(async ({ contract }) => ok(await svc.getLithiumEmissionInfo(contract))));
78
+ server.registerTool("li_reward_estimate", {
79
+ description: "Estimate LI reward for a given difficulty: gross_reward, estimated_gas_cost_uboot, earns_reward",
80
+ inputSchema: {
81
+ difficulty_bits: z.number().min(1).describe("Difficulty in bits (leading zero bits)"),
82
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
83
+ },
84
+ annotations: READ_ONLY_ANNOTATIONS,
85
+ }, safe(async ({ difficulty_bits, contract }) => ok(await svc.calculateReward(contract, difficulty_bits))));
86
+ server.registerTool("li_mine_stats", {
87
+ description: "Get aggregate mining stats: total_proofs, total_rewards, unique_miners, avg_difficulty",
88
+ inputSchema: {
89
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
90
+ },
91
+ annotations: READ_ONLY_ANNOTATIONS,
92
+ }, safe(async ({ contract }) => ok(await svc.getMineStats(contract))));
93
+ server.registerTool("li_miner_stats", {
94
+ description: "Get per-miner stats: proofs_submitted, total_rewards, last_proof_height",
95
+ inputSchema: {
96
+ address: z.string().describe("Miner address (bostrom1...)"),
97
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
98
+ },
99
+ annotations: READ_ONLY_ANNOTATIONS,
100
+ }, safe(async ({ address, contract }) => ok(await svc.getMinerStats(contract, address))));
101
+ server.registerTool("li_miner_epoch_stats", {
102
+ description: "Get a miner's proof count for a specific Lithium epoch",
103
+ inputSchema: {
104
+ address: z.string().describe("Miner address (bostrom1...)"),
105
+ epoch_id: z.number().min(0).describe("Lithium epoch ID"),
106
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
107
+ },
108
+ annotations: READ_ONLY_ANNOTATIONS,
109
+ }, safe(async ({ address, epoch_id, contract }) => ok(await svc.getLithiumMinerEpochStats(contract, address, epoch_id))));
110
+ server.registerTool("li_verify_proof", {
111
+ description: "Dry-run verify a proof without submitting: valid, difficulty_bits, estimated_reward",
112
+ inputSchema: {
113
+ hash: z.string().describe("Computed hash (hex)"),
114
+ nonce: z.number().describe("Nonce"),
115
+ timestamp: z.number().describe("Timestamp (unix seconds)"),
116
+ miner: z.string().describe("Miner address (bostrom1...)"),
117
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
118
+ },
119
+ annotations: READ_ONLY_ANNOTATIONS,
120
+ }, safe(async ({ hash, nonce, timestamp, miner, contract }) => ok(await svc.verifyProof(contract, hash, nonce, timestamp, miner))));
121
+ server.registerTool("li_recent_proofs", {
122
+ description: "Get recent proof submission transactions for the mine contract",
123
+ inputSchema: {
124
+ limit: z.number().min(1).max(50).default(10),
125
+ contract: z.string().default(LITIUM_MINE).describe("litium-mine contract address"),
126
+ },
127
+ annotations: READ_ONLY_ANNOTATIONS,
128
+ }, safe(async ({ limit, contract }) => {
129
+ const proofs = await svc.getRecentProofs(contract, limit);
130
+ const pagination = paginationHint("li_recent_proofs", 0, limit, proofs);
131
+ return ok({ proofs, ...(pagination && { pagination }) });
132
+ }));
133
+ // ── litium-stake ─────────────────────────────────────────────
134
+ server.registerTool("li_stake_config", {
135
+ description: "Get litium-stake config: core_contract, mine_contract, token_denom, unbonding_period_seconds, admin, paused",
136
+ inputSchema: {
137
+ contract: z.string().default(LITIUM_STAKE).describe("litium-stake contract address"),
138
+ },
139
+ annotations: READ_ONLY_ANNOTATIONS,
140
+ }, safe(async ({ contract }) => ok(await svc.getStakeConfig(contract))));
141
+ server.registerTool("li_total_staked", {
142
+ description: "Get total LI staked across all stakers",
143
+ inputSchema: {
144
+ contract: z.string().default(LITIUM_STAKE).describe("litium-stake contract address"),
145
+ },
146
+ annotations: READ_ONLY_ANNOTATIONS,
147
+ }, safe(async ({ contract }) => ok(await svc.getTotalStaked(contract))));
148
+ server.registerTool("li_stake_info", {
149
+ description: "Get staking state for an address: staked_amount, pending_unbonding, pending_unbonding_until, claimable_rewards",
150
+ inputSchema: {
151
+ address: z.string().describe("Staker address (bostrom1...)"),
152
+ contract: z.string().default(LITIUM_STAKE).describe("litium-stake contract address"),
153
+ },
154
+ annotations: READ_ONLY_ANNOTATIONS,
155
+ }, safe(async ({ address, contract }) => ok(await svc.getStakeInfo(contract, address))));
156
+ server.registerTool("li_staking_stats", {
157
+ description: "Get aggregate staking stats: reserve, total_staked, reward_index",
158
+ inputSchema: {
159
+ contract: z.string().default(LITIUM_STAKE).describe("litium-stake contract address"),
160
+ },
161
+ annotations: READ_ONLY_ANNOTATIONS,
162
+ }, safe(async ({ contract }) => ok(await svc.getStakingStats(contract))));
163
+ // ── litium-refer ─────────────────────────────────────────────
164
+ server.registerTool("li_refer_config", {
165
+ description: "Get litium-refer config: core_contract, mine_contract, community_pool_addr, admin, paused",
166
+ inputSchema: {
167
+ contract: z.string().default(LITIUM_REFER).describe("litium-refer contract address"),
168
+ },
169
+ annotations: READ_ONLY_ANNOTATIONS,
170
+ }, safe(async ({ contract }) => ok(await svc.getReferConfig(contract))));
171
+ server.registerTool("li_referrer_of", {
172
+ description: "Get who referred a specific miner",
173
+ inputSchema: {
174
+ miner: z.string().describe("Miner address (bostrom1...)"),
175
+ contract: z.string().default(LITIUM_REFER).describe("litium-refer contract address"),
176
+ },
177
+ annotations: READ_ONLY_ANNOTATIONS,
178
+ }, safe(async ({ miner, contract }) => ok(await svc.getReferrerOf(contract, miner))));
179
+ server.registerTool("li_referral_info", {
180
+ description: "Get referral stats for a referrer: referral_rewards, referrals_count",
181
+ inputSchema: {
182
+ address: z.string().describe("Referrer address (bostrom1...)"),
183
+ contract: z.string().default(LITIUM_REFER).describe("litium-refer contract address"),
184
+ },
185
+ annotations: READ_ONLY_ANNOTATIONS,
186
+ }, safe(async ({ address, contract }) => ok(await svc.getReferralInfo(contract, address))));
187
+ server.registerTool("li_community_pool", {
188
+ description: "Get unclaimed community pool balance (referral rewards for miners without referrer)",
189
+ inputSchema: {
190
+ contract: z.string().default(LITIUM_REFER).describe("litium-refer contract address"),
191
+ },
192
+ annotations: READ_ONLY_ANNOTATIONS,
193
+ }, safe(async ({ contract }) => ok(await svc.getCommunityPoolBalance(contract))));
194
+ // ── cross-contract: miner TX history ─────────────────────────
195
+ server.registerTool("li_miner_tx_history", {
196
+ description: "Get a miner's recent contract execution TX history and total count",
197
+ inputSchema: {
198
+ address: z.string().describe("Miner address (bostrom1...)"),
199
+ limit: z.number().min(1).max(50).default(20),
200
+ },
201
+ annotations: READ_ONLY_ANNOTATIONS,
202
+ }, safe(async ({ address, limit }) => {
203
+ const result = await svc.getMinerTxHistory(address, limit);
204
+ const pagination = paginationHint("li_miner_tx_history", 0, limit, result.recent_txs);
205
+ return ok({ ...result, ...(pagination && { pagination }) });
206
+ }));
207
+ }
208
+ //# sourceMappingURL=lithium.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lithium.js","sourceRoot":"","sources":["../../src/tools/lithium.ts"],"names":[],"mappings":"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"}