Skip to main content
Glama
angheljf

NYTimes Article Search MCP Server

search_articles

Search for New York Times articles published within the last 30 days using a specific keyword to find relevant content quickly.

Instructions

Search NYTimes articles from the last 30 days based on a keyword

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keywordYesKeyword to search for in articles

Implementation Reference

  • Executes the search_articles tool: validates input, queries NYTimes API for recent articles matching the keyword, maps response to simplified format, returns as JSON text content.
    async (request) => {
      if (request.params.name !== "search_articles") {
        throw new McpError(
          ErrorCode.MethodNotFound,
          `Unknown tool: ${request.params.name}`
        );
      }
    
      if (!isValidSearchArticlesArgs(request.params.arguments)) {
        throw new McpError(
          ErrorCode.InvalidParams,
          "Invalid search arguments"
        );
      }
    
      const keyword = request.params.arguments.keyword;
    
      try {
        const response = await this.axiosInstance.get<NYTimesApiResponse>(API_CONFIG.ENDPOINT, {
          params: {
            q: keyword,
            sort: 'newest',
            'begin_date': this.getDateString(30),  // 30 days ago
            'end_date': this.getDateString(0)  // today
          }
        });
    
        const articles: ArticleSearchResult[] = response.data.response.docs.map(article => ({
          title: article.headline.main,
          abstract: article.abstract,
          url: article.web_url,
          publishedDate: article.pub_date,
          author: article.byline.original || 'Unknown'
        }));
    
        return {
          content: [{
            type: "text",
            text: JSON.stringify(articles, null, 2)
          }]
        };
      } catch (error) {
        if (axios.isAxiosError(error)) {
          return {
            content: [{
              type: "text",
              text: `NYTimes API error: ${error.response?.data.message ?? error.message}`
            }],
            isError: true,
          }
        }
        throw error;
      }
    }
  • src/index.ts:94-112 (registration)
    Registers the 'search_articles' tool in the MCP ListToolsRequestSchema response, including name, description, and input schema.
    this.server.setRequestHandler(
      ListToolsRequestSchema,
      async () => ({
        tools: [{
          name: "search_articles",
          description: "Search NYTimes articles from the last 30 days based on a keyword",
          inputSchema: {
            type: "object",
            properties: {
              keyword: {
                type: "string",
                description: "Keyword to search for in articles"
              }
            },
            required: ["keyword"]
          }
        }]
      })
    );
  • TypeScript interface defining the input arguments for search_articles tool.
    export interface SearchArticlesArgs {
      keyword: string;
    }
  • Type guard function to validate search_articles arguments before execution.
    export function isValidSearchArticlesArgs(args: any): args is SearchArticlesArgs {
      return (
        typeof args === "object" &&
        args !== null &&
        "keyword" in args &&
        typeof args.keyword === "string"
      );
    }
  • Helper function to format date for NYTimes API query (days ago).
    private getDateString(daysAgo: number): string {
      const date = new Date();
      date.setDate(date.getDate() - daysAgo);
      return date.toISOString().split('T')[0].replace(/-/g, '');
    }
Install Server

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/angheljf/nyt'

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