Skip to main content
Glama

Financial Modeling Prep MCP Server

Apache 2.0
17
59
  • Linux
  • Apple
news.ts12.4 kB
import { z } from "zod"; import { NewsClient } from "../api/news/NewsClient.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; /** * Register all news-related tools with the MCP server * @param server The MCP server instance * @param accessToken The Financial Modeling Prep API access token (optional when using lazy loading) */ export function registerNewsTools( server: McpServer, accessToken?: string ): void { const newsClient = new NewsClient(accessToken); server.tool( "getFMPArticles", "Access the latest articles from Financial Modeling Prep with the FMP Articles API. Get comprehensive updates including headlines, snippets, and publication URLs.", { page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20)"), }, async ({ page, limit }) => { try { const results = await newsClient.getFMPArticles({ page, limit }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "getGeneralNews", "Access the latest general news articles from a variety of sources with the FMP General News API. Obtain headlines, snippets, and publication URLs for comprehensive news coverage.", { from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ from, to, page, limit }) => { try { const results = await newsClient.getGeneralNews({ from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "getPressReleases", "Access official company press releases with the FMP Press Releases API. Get real-time updates on corporate announcements, earnings reports, mergers, and more.", { from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ from, to, page, limit }) => { try { const results = await newsClient.getPressReleases({ from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "getStockNews", "Stay informed with the latest stock market news using the FMP Stock News Feed API. Access headlines, snippets, publication URLs, and ticker symbols for the most recent articles from a variety of sources.", { from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ from, to, page, limit }) => { try { const results = await newsClient.getStockNews({ from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "getCryptoNews", "Stay informed with the latest cryptocurrency news using the FMP Crypto News API. Access a curated list of articles from various sources, including headlines, snippets, and publication URLs.", { from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ from, to, page, limit }) => { try { const results = await newsClient.getCryptoNews({ from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "getForexNews", "Stay updated with the latest forex news articles from various sources using the FMP Forex News API. Access headlines, snippets, and publication URLs for comprehensive market insights.", { from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ from, to, page, limit }) => { try { const results = await newsClient.getForexNews({ from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "searchPressReleases", "Search for company press releases with the FMP Search Press Releases API. Find specific corporate announcements and updates by entering a stock symbol or company name.", { symbols: z.string().describe("Comma-separated list of stock symbols"), from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ symbols, from, to, page, limit }) => { try { const results = await newsClient.searchPressReleases({ symbols, from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "searchStockNews", "Search for stock-related news using the FMP Search Stock News API. Find specific stock news by entering a ticker symbol or company name to track the latest developments.", { symbols: z.string().describe("Comma-separated list of stock symbols"), from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ symbols, from, to, page, limit }) => { try { const results = await newsClient.searchStockNews({ symbols, from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "searchCryptoNews", "Search for cryptocurrency news using the FMP Search Crypto News API. Retrieve news related to specific coins or tokens by entering their name or symbol.", { symbols: z .string() .describe("Comma-separated list of cryptocurrency symbols"), from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ symbols, from, to, page, limit }) => { try { const results = await newsClient.searchCryptoNews({ symbols, from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); server.tool( "searchForexNews", "Search for foreign exchange news using the FMP Search Forex News API. Find targeted news on specific currency pairs by entering their symbols for focused updates.", { symbols: z.string().describe("Comma-separated list of forex pairs"), from: z.string().optional().describe("Start date (YYYY-MM-DD)"), to: z.string().optional().describe("End date (YYYY-MM-DD)"), page: z.number().optional().describe("Page number (default: 0)"), limit: z .number() .optional() .describe("Limit on number of results (default: 20, max: 250)"), }, async ({ symbols, from, to, page, limit }) => { try { const results = await newsClient.searchForexNews({ symbols, from, to, page, limit, }); return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${ error instanceof Error ? error.message : String(error) }`, }, ], isError: true, }; } } ); }

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/imbenrabi/Financial-Modeling-Prep-MCP-Server'

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