Skip to main content
Glama
OctagonAI

mcp-octagon

Official
by OctagonAI

octagon-scraper-agent

Extract structured financial data from investor relations websites and online sources for investment research when APIs are unavailable.

Instructions

[PUBLIC & PRIVATE MARKET INTELLIGENCE] Specialized agent for financial data extraction from investor websites. Capabilities: Extract structured financial data from investor relations websites, tables, and online financial sources. Best for: Gathering financial data from websites that don't have accessible APIs. Example queries: 'Extract all data fields from zillow.com/san-francisco-ca/', 'Extract all data fields from www.carvana.com/cars/'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
promptYesYour natural language query or request for the agent

Implementation Reference

  • Handler function that invokes the Octagon 'octagon-scraper-agent' model via OpenAI-compatible client, processes the streaming chat completion response, and returns the formatted text content or error.
    async ({ prompt }: PromptParams) => {
      try {
        const response = await octagonClient.chat.completions.create({
          model: "octagon-scraper-agent",
          messages: [{ role: "user", content: prompt }],
          stream: true,
          metadata: { tool: "mcp" }
        });
    
        const result = await processStreamingResponse(response);
        return {
          content: [
            {
              type: "text",
              text: result,
            },
          ],
        };
      } catch (error) {
        console.error("Error calling Scraper agent:", error);
        return {
          isError: true,
          content: [
            {
              type: "text",
              text: `Error: Failed to process web scraping query. ${error}`,
            },
          ],
        };
      }
    }
  • Input schema defining the 'prompt' parameter for the tool.
      prompt: z.string().describe("Your natural language query or request for the agent"),
    },
  • src/index.ts:128-165 (registration)
    MCP server tool registration for 'octagon-scraper-agent', including name, description, schema, and handler reference.
    server.tool(
      "octagon-scraper-agent",
      "[PUBLIC & PRIVATE MARKET INTELLIGENCE] Specialized agent for financial data extraction from investor websites. Capabilities: Extract structured financial data from investor relations websites, tables, and online financial sources. Best for: Gathering financial data from websites that don't have accessible APIs. Example queries: 'Extract all data fields from zillow.com/san-francisco-ca/', 'Extract all data fields from www.carvana.com/cars/'.",
      {
        prompt: z.string().describe("Your natural language query or request for the agent"),
      },
      async ({ prompt }: PromptParams) => {
        try {
          const response = await octagonClient.chat.completions.create({
            model: "octagon-scraper-agent",
            messages: [{ role: "user", content: prompt }],
            stream: true,
            metadata: { tool: "mcp" }
          });
    
          const result = await processStreamingResponse(response);
          return {
            content: [
              {
                type: "text",
                text: result,
              },
            ],
          };
        } catch (error) {
          console.error("Error calling Scraper agent:", error);
          return {
            isError: true,
            content: [
              {
                type: "text",
                text: `Error: Failed to process web scraping query. ${error}`,
              },
            ],
          };
        }
      }
    );
  • Shared helper function to process streaming responses from the Octagon API, aggregating content from chat completions or responses API chunks. Used by the tool handler.
    async function processStreamingResponse(stream: any): Promise<string> {
      let fullResponse = "";
      let citations: any[] = [];
    
      try {
        // Process the streaming response
        for await (const chunk of stream) {
          // For Chat Completions API
          if (chunk.choices && chunk.choices[0]?.delta?.content) {
            fullResponse += chunk.choices[0].delta.content;
    
            // Check for citations in the final chunk
            if (chunk.choices[0]?.finish_reason === "stop" && chunk.choices[0]?.citations) {
              citations = chunk.choices[0].citations;
            }
          }
    
          // For Responses API
          if (chunk.type === "response.output_text.delta") {
            fullResponse += chunk.text?.delta || "";
          }
        }
    
        return fullResponse;
      } catch (error) {
        console.error("Error processing streaming response:", error);
        throw error;
      }
    }

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/OctagonAI/octagon-mcp-server'

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