API-getStakerProfitSnapshots
Retrieve profit snapshots for stakers to track earnings and performance over time using RSS3 network data.
Instructions
Retrieve snapshots of the staker profit
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- index.js:149-223 (handler)Generic handler for executing all dynamically generated API tools, such as API-getStakerProfitSnapshots. It looks up the corresponding OpenAPI operation by tool name, invokes the HTTP client to execute it with the provided parameters, and returns the JSON response or structured error.// handle tool calling server.setRequestHandler(CallToolRequestSchema, async (request) => { // console.error("call tool", request.params); const { name, arguments: params } = request.params; console.error("name", name); if (name === "API-get-input-schema") { for (const mcpToolWithClient of mcpToolWithClients) { for (const [toolName, def] of Object.entries( mcpToolWithClient.mcpTools.tools, )) { for (const method of def.methods) { const toolNameWithMethod = `${toolName}-${method.name}`; const truncatedToolName = toolNameWithMethod.slice(0, 64); if (truncatedToolName === params.toolName) { return { content: [ { type: "text", text: JSON.stringify(method.inputSchema) }, ], }; } } } } throw new Error(`Method ${params.toolName} not found`); } // find operation const mcpToolWithClient = mcpToolWithClients.find( (t) => t.mcpTools.openApiLookup[name], ); if (!mcpToolWithClient) { throw new Error(`Method ${name} not found`); } const operation = mcpToolWithClient.mcpTools.openApiLookup[name]; // execute try { const response = await mcpToolWithClient.client.executeOperation( operation, params, ); return { content: [ { type: "text", // currently this is the only type that seems to be used by mcp server text: JSON.stringify(response.data), // TODO: pass through the http status code text? }, ], }; } catch (error) { console.error("Error in tool call", error); if (error instanceof HttpClientError) { console.error( "HttpClientError encountered, returning structured error", error, ); const data = error.data?.response?.data ?? error.data ?? {}; return { content: [ { type: "text", text: JSON.stringify({ status: "error", // TODO: get this from http status code? ...(typeof data === "object" ? data : { data: data }), }), }, ], }; } throw error; } });
- index.js:99-147 (registration)Dynamic registration of API tools via the ListToolsRequestHandler. Iterates over OpenAPI-derived MCP tools to construct tool names as `${toolName}-${method.name}` (truncated), descriptions, and generic input schemas. Includes the special API-get-input-schema tool. This is where API-getStakerProfitSnapshots would be registered if present in the OpenAPI specs.// handle tool listing server.setRequestHandler(ListToolsRequestSchema, async () => { console.error("list tools"); /** * @typedef {import("@modelcontextprotocol/sdk/types.js").Tool} Tool * @type {Tool[]} */ const tools = []; for (const mcpToolWithClient of mcpToolWithClients) { for (const [toolName, def] of Object.entries( mcpToolWithClient.mcpTools.tools, )) { for (const method of def.methods) { console.error("method", method); const toolNameWithMethod = `${toolName}-${method.name}`; const truncatedToolName = toolNameWithMethod.slice(0, 64); const trimmedDescription = method.description.split("Error")[0].trim(); tools.push({ name: truncatedToolName, description: trimmedDescription, inputSchema: { type: "object", properties: {}, }, }); } } } tools.unshift({ name: "API-get-input-schema", description: "Get the input schema for a given API. We should always use this tool to get the input schema for a given API before calling the API.", inputSchema: { type: "object", properties: { toolName: { type: "string", description: "The name of the tool to get the input schema for", }, }, }, }); console.error("tools", tools); return { tools }; });
- index.js:78-84 (helper)Helper that converts OpenAPI specs to MCP tools using OpenAPIToMCPConverter.convertToMCPTools(), creating the mcpTools objects used for lookup and execution of individual API tools like API-getStakerProfitSnapshots.const mcpToolWithClients = converterWithClients.map((cwc) => { const mcpTools = cwc.converter.convertToMCPTools(); return { mcpTools, client: cwc.client, }; });
- index.js:71-77 (helper)Helper that initializes OpenAPIToMCPConverter and HttpClient instances from fetched RSS3 OpenAPI specifications.const converterWithClients = openApiSpecs.map((o) => { const converter = new OpenAPIToMCPConverter(o.spec); return { converter, client: o.client, }; });