Skip to main content
Glama
RSS3-Network

RSS3 MCP Server

Official
by RSS3-Network

API-getBridgingTransactionByHash

Retrieve bridging transaction details using a transaction hash to track cross-chain asset transfers within the RSS3 network.

Instructions

Retrieve bridging transaction by hash

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Shared handler for executing all dynamically generated API tools, including "API-getBridgingTransactionByHash". Looks up the OpenAPI operation by tool name and calls it via HttpClient.
    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:100-147 (registration)
    Dynamically generates and registers all tools from OpenAPI specs for listing, including the one named "API-getBridgingTransactionByHash".
    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 };
    });
  • Dynamic retrieval of input schema for any tool, including "API-getBridgingTransactionByHash", from the OpenAPI method schema.
    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`);
    }
  • Converts OpenAPI specs to MCP tools and associates with HttpClient; source of the "API-getBridgingTransactionByHash" tool definition.
    const mcpToolWithClients = converterWithClients.map((cwc) => {
    	const mcpTools = cwc.converter.convertToMCPTools();
    	return {
    		mcpTools,
    		client: cwc.client,
    	};
    });
  • Fetches OpenAPI specifications from RSS3 endpoints, which define the APIs including getBridgingTransactionByHash.
    const openApiSpecs = (
    	await Promise.allSettled([
    		fetch("https://gi.rss3.io/docs/openapi.json").then(async (res) => {
    			if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
    			return res.json();
    		}),
    		fetch("https://ai.rss3.io/openapi.json").then(async (res) => {
    			if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
    			return res.json();
    		}),
    	]).then((results) => {
    		return results.map((result) => {
    			if (result.status === "fulfilled") {
    				const client = new HttpClient(
    					{
    						baseUrl: result.value.servers[0].url,
    					},
    					result.value,
    				);
    				return {
    					spec: result.value,
    					client,
    				};
    			}
    
    			console.error("Failed to fetch openapi spec", result.reason);
    			return null;
    		});
    	})
    ).filter(Boolean);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RSS3-Network/mcp-server-rss3'

If you have feedback or need assistance with the MCP directory API, please join our Discord server