Skip to main content
Glama
Bankless

Bankless Onchain MCP Server

Official
by Bankless

build_event_topic

Generates event topic signatures for blockchain events by specifying the event name and argument types, enabling accurate data retrieval and analysis on supported networks.

Instructions

Builds an event topic signature based on event name and arguments

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argumentsYesEvent arguments types
nameYesEvent name (e.g., "Transfer(address,address,uint256)")
networkYesThe blockchain network (e.g., "ethereum", "base")

Implementation Reference

  • The main handler function that executes the tool logic: validates inputs implicitly via caller, processes arguments, makes authenticated POST request to Bankless API to build the event topic signature, and handles various errors.
    export async function buildEventTopic( network: string, name: string, arguments_: z.infer<typeof OutputSchema>[] ): Promise<string> { const token = process.env.BANKLESS_API_TOKEN; if (!token) { throw new BanklessAuthenticationError('BANKLESS_API_TOKEN environment variable is not set'); } const endpoint = `${BASE_URL}/chains/${network}/contract/build-event-topic`; const cleanedOutputs = processOutputs(arguments_); try { const response = await axios.post( endpoint, { name, arguments: cleanedOutputs }, { headers: { 'Content-Type': 'application/json', 'X-BANKLESS-TOKEN': `${token}` } } ); return response.data; } catch (error) { if (axios.isAxiosError(error)) { const statusCode = error.response?.status || 'unknown'; const errorMessage = error.response?.data?.message || error.message; if (statusCode === 401 || statusCode === 403) { throw new BanklessAuthenticationError(`Authentication Failed: ${errorMessage}`); } else if (statusCode === 404) { throw new BanklessResourceNotFoundError(`Not Found: ${errorMessage}`); } else if (statusCode === 422) { throw new BanklessValidationError(`Validation Error: ${errorMessage}`, error.response?.data); } else if (statusCode === 429) { // Extract reset timestamp or default to 60 seconds from now const resetAt = new Date(); resetAt.setSeconds(resetAt.getSeconds() + 60); throw new BanklessRateLimitError(`Rate Limit Exceeded: ${errorMessage}`, resetAt); } throw new Error(`Bankless API Error (${statusCode}): ${errorMessage}`); } throw new Error(`Failed to build event topic: ${error instanceof Error ? error.message : String(error)}`); } }
  • Input schema using Zod for validating the tool's parameters: network, event name, and array of argument types.
    export const BuildEventTopicSchema = z.object({ network: z.string().describe('The blockchain network (e.g., "ethereum", "base")'), name: z.string().describe('Event name (e.g., "Transfer(address,address,uint256)")'), arguments: z.array(OutputSchema).describe('Event arguments types') });
  • src/index.ts:104-108 (registration)
    Tool registration in the MCP server's ListTools handler, specifying name, description, and input schema.
    { name: "build_event_topic", description: "Builds an event topic signature based on event name and arguments", inputSchema: zodToJsonSchema(events.BuildEventTopicSchema), },
  • src/index.ts:206-216 (registration)
    Dispatch handler in the MCP server's CallToolRequestHandler that parses arguments with the schema and invokes the buildEventTopic function.
    case "build_event_topic": { const args = events.BuildEventTopicSchema.parse(request.params.arguments); const result = await events.buildEventTopic( args.network, args.name, args.arguments ); return { content: [{type: "text", text: JSON.stringify(result, null, 2)}], }; }

Other Tools

Related Tools

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/Bankless/onchain-mcp'

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