Skip to main content
Glama

research-source

Analyzes specific sources to provide research on cryptocurrency tokens, identifying key information and insights for informed decision-making.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tokenNameYesName of the token
tokenTickerYesTicker symbol of the token
sourceYesSingle source to research

Implementation Reference

  • Handler for 'research-source' tool: searches web for token+source, fetches top result content, stores as resource, returns summary with resource link.
      async ({
        tokenName,
        tokenTicker,
        source,
      }: {
        tokenName: string;
        tokenTicker: string;
        source: string;
      }) => {
        storage.addLogEntry(
          `Researching source: ${source} for ${tokenName} (${tokenTicker})`
        );
    
        try {
          const query = `${tokenName} ${tokenTicker} ${source}`;
    
          const results = await performSearch(query, "web");
    
          if (!results.results || results.results.length === 0) {
            storage.addLogEntry(`No results found for ${source}`);
            return {
              content: [
                {
                  type: "text",
                  text: `No results found for ${source}`,
                },
              ],
            };
          }
    
          const topResults = results.results.slice(0, 3);
          storage.addToSection("searchResults", { [source]: topResults });
    
          if (topResults[0] && topResults[0].url) {
            try {
              const url = topResults[0].url;
              storage.addLogEntry(`Fetching content from ${url}`);
              const content = await fetchContent(url, "markdown");
    
              const resourceId = `${source.toLowerCase()}_${tokenName.toLowerCase()}_${new Date().getTime()}`;
    
              storage.addToSection("resources", {
                [resourceId]: {
                  url,
                  format: "markdown",
                  content,
                  title: topResults[0].title,
                  source,
                  fetchedAt: new Date().toISOString(),
                },
              });
    
              return {
                content: [
                  {
                    type: "text",
                    text: `Researched ${source} for ${tokenName} (${tokenTicker}).\n\nTop result: ${
                      topResults[0].title
                    }\n\nContent saved as resource: research://resource/${resourceId}\n\nAll search results:\n${JSON.stringify(
                      topResults,
                      null,
                      2
                    )}`,
                  },
                ],
              };
            } catch (error) {
              storage.addLogEntry(
                `Error fetching content from ${topResults[0].url}: ${error}`
              );
              return {
                content: [
                  {
                    type: "text",
                    text: `Found search results for ${source}, but couldn't fetch content: ${error}\n\nSearch results:\n${JSON.stringify(
                      topResults,
                      null,
                      2
                    )}`,
                  },
                ],
              };
            }
          }
    
          return {
            content: [
              {
                type: "text",
                text: `Search results for ${source}:\n\n${JSON.stringify(
                  topResults,
                  null,
                  2
                )}`,
              },
            ],
          };
        } catch (error) {
          storage.addLogEntry(`Error researching ${source}: ${error}`);
          return {
            isError: true,
            content: [
              {
                type: "text",
                text: `Error researching ${source}: ${error}`,
              },
            ],
          };
        }
      }
    );
  • Zod input schema for 'research-source' tool defining required string parameters.
    {
      tokenName: z.string().describe("Name of the token"),
      tokenTicker: z.string().describe("Ticker symbol of the token"),
      source: z.string().describe("Single source to research"),
    },
  • Registers the 'research-source' tool on the MCP server within registerResearchTools function.
    server.tool(
      "research-source",
  • Top-level registration function that invokes registerResearchTools, thereby registering 'research-source'.
    export function registerAllTools(
      server: McpServer,
      storage: ResearchStorage
    ): void {
      registerResearchTools(server, storage);
    }

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/aaronjmars/web3-research-mcp'

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