-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathmcp-handler.ts
More file actions
89 lines (85 loc) · 3.23 KB
/
Copy pathmcp-handler.ts
File metadata and controls
89 lines (85 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// src/mcp-handler.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { ImageModel, Model } from "@blockrun/llm";
import type { BudgetState } from "./types.js";
import { getClient, getWalletInfo } from "./utils/wallet.js";
import { registerWalletTool } from "./tools/wallet.js";
import { registerChatTool } from "./tools/chat.js";
import { registerModelsTool } from "./tools/models.js";
import { registerImageTool } from "./tools/image.js";
import { registerMusicTool } from "./tools/music.js";
import { registerSpeechTool } from "./tools/speech.js";
import { registerVideoTool } from "./tools/video.js";
import { registerRealfaceTool } from "./tools/realface.js";
import { registerSearchTool } from "./tools/search.js";
import { registerExaTool } from "./tools/exa.js";
import { registerMarketsTool } from "./tools/markets.js";
import { registerPriceTool } from "./tools/price.js";
import { registerDexTool } from "./tools/dex.js";
import { registerModalTool } from "./tools/modal.js";
import { registerPhoneTool } from "./tools/phone.js";
import { registerSurfTool } from "./tools/surf.js";
import { registerRpcTool } from "./tools/rpc.js";
import { registerDefiTool } from "./tools/defi.js";
import { registerTalentTool } from "./tools/talent.js";
export function initializeMcpServer(server: McpServer): void {
const budget: BudgetState = { limit: null, spent: 0, calls: 0, agents: new Map() };
const modelCache: { models: Array<Model | ImageModel> | null } = { models: null };
// Register all tools
registerWalletTool(server, budget);
registerChatTool(server, budget);
registerModelsTool(server, modelCache);
registerImageTool(server, budget);
registerMusicTool(server, budget);
registerSpeechTool(server, budget);
registerVideoTool(server, budget);
registerRealfaceTool(server, budget);
registerSearchTool(server, budget);
registerExaTool(server, budget);
registerMarketsTool(server, budget);
registerPriceTool(server, budget);
registerDexTool(server);
registerModalTool(server, budget);
registerPhoneTool(server, budget);
registerSurfTool(server, budget);
registerRpcTool(server, budget);
registerDefiTool(server, budget);
registerTalentTool(server, budget);
// Register resources
server.registerResource(
"wallet",
"blockrun://wallet",
{ description: "Wallet address and status", mimeType: "application/json" },
async () => {
const info = await getWalletInfo();
return {
contents: [{
uri: "blockrun://wallet",
mimeType: "application/json",
text: JSON.stringify(info, null, 2),
}],
};
}
);
server.registerResource(
"models",
"blockrun://models",
{ description: "Available AI models with pricing", mimeType: "application/json" },
async () => {
const llm = getClient();
if (!modelCache.models) {
modelCache.models = "listAllModels" in llm
? await llm.listAllModels()
: await llm.listModels();
setTimeout(() => { modelCache.models = null; }, 5 * 60 * 1000);
}
return {
contents: [{
uri: "blockrun://models",
mimeType: "application/json",
text: JSON.stringify(modelCache.models, null, 2),
}],
};
}
);
}