This workflow corresponds to n8n.io template #5649 — we link there as the canonical source.
This workflow follows the HTTP Request Tool → Mcptrigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "EYLulD1708dCvuLU",
"meta": null,
"name": "[New York Times] Article Search API MCP Server",
"tags": [],
"nodes": [
{
"id": "6b8f81f6-8a53-4467-a70b-e9846ced800f",
"name": "Setup Instructions",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1380,
-240
],
"parameters": {
"color": 4,
"height": 1060,
"content": "### \u2699\ufe0f Setup Instructions\n\n1. **Import Workflow**: \nLoad this workflow into your n8n instance\n\n2. **Configure Authentication**: \nSet up apiKey credentials\n - Type: API Key in query\n - Key name: api-key\n\n3. **Activate Workflow**:\nEnable the workflow to start the MCP server\n\n4. **Get MCP URL**: \nCopy the webhook URL from the MCP trigger\n\n5. **Connect AI Agent**:\nUse the MCP URL in your AI agent configuration\n\n\n### \ud83d\udca1 Usage Notes\n\u2022 Parameters are auto-populated by AI using $fromAI() expressions\n\u2022 With 1 API endpoints available as tools\n\u2022 Responses maintain original API structure\n\n\n### \ud83d\udee0\ufe0f Customization\n\u2022 Add data transformation nodes if needed\n\u2022 Implement custom error handling\n\u2022 Add logging or monitoring nodes\n\n\u2022 Modify parameter defaults in any HTTP request node as needed\n\n### \ud83d\udcac Need Help?\nPing me on [discord](https://discord.me/cfomodz) for integration guidance and custom automations. Check the [n8n documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolmcp/) for more information."
},
"typeVersion": 1
},
{
"id": "75aaf454-5c06-4b99-9f59-940c3cd6b689",
"name": "Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1120,
-240
],
"parameters": {
"width": 420,
"height": 920,
"content": "## \ud83d\udee0\ufe0f Article Search MCP Server \u2705 1 operations\n\n### About\nThe Article Search API lets you query New York Times articles from 1851 to present, returning metadata including headlines, abstracts, multimedia links, and article content. Italicized terms in URIs and fields represent variables, while brackets [ ] denote optional parameters.\n\n### \ud83d\udd27 How it Works\n\nThis workflow converts the Article Search API into an MCP-compatible interface for AI agents.\n\n\u2022 **MCP Trigger**: Serves as your server endpoint for AI agent requests\n\u2022 **HTTP Request Nodes**: Handle API calls to http://api.nytimes.com/svc/search/v2\n\u2022 **AI Expressions**: Automatically populate parameters via `$fromAI()` placeholders\n\u2022 **Native Integration**: Returns responses directly to the AI agent\n\n\n### \ud83d\udccb Available Operations (1 endpoints)\n\n**Stories (1 operations)**\nSearch Articles\n\n"
},
"typeVersion": 1
},
{
"id": "b672dd36-23f0-4d3d-a134-3b053bf528eb",
"name": "Article Search MCP Server",
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"position": [
-620,
-240
],
"parameters": {
"path": "article-search-mcp"
},
"typeVersion": 1
},
{
"id": "c1308c48-fd1a-43a4-9a7d-bed56e41a8f8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-660,
-100
],
"parameters": {
"color": 2,
"width": 300,
"height": 200,
"content": "## Stories"
},
"typeVersion": 1
},
{
"id": "e61da932-518a-4520-b7c9-602a36ec9b0a",
"name": "Search Articles",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
-520,
-60
],
"parameters": {
"url": "=http://api.nytimes.com/svc/search/v2/articlesearch.json",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "queryAuth",
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "={{ $fromAI('q', 'Search query term. Search is performed on the article body, headline and byline.', 'string') }}"
},
{
"name": "fq",
"value": "={{ $fromAI('fq', '\"Filtered search query using standard Lucene syntax. The filter query can be specified with or without a limiting field: label. See Filtering Your Search for more information about filtering.\"', 'string') }}"
},
{
"name": "begin_date",
"value": "={{ $fromAI('begin_date', '\"Format: YYYYMMDD Restricts responses to results with publication dates of the date specified or later.\"', 'string') }}"
},
{
"name": "end_date",
"value": "={{ $fromAI('end_date', '\"Format: YYYYMMDD Restricts responses to results with publication dates of the date specified or earlier.\"', 'string') }}"
},
{
"name": "sort",
"value": "={{ $fromAI('sort', '\"By default, search results are sorted by their relevance to the query term (q). Use the sort parameter to sort by pub_date.\"', 'string') }}"
},
{
"name": "fl",
"value": "={{ $fromAI('fl', '\"Comma-delimited list of fields (no limit) Limits the fields returned in your search results. By default (unless you include an fl list in your request), the following fields are returned: web_url snippet lead_paragraph abstract print_page blog source multimedia headline keywords pub_date document_type news_desk byline type_of_material _id word_count\"', 'string') }}"
},
{
"name": "hl",
"value": "={{ $fromAI('hl', 'Enables highlighting in search results. When set to true, the query term (q) is highlighted in the headline and lead_paragraph fields. Note: If highlighting is enabled, snippet will be returned even if it is not specified in your fl list.\"', 'boolean', false) }}"
},
{
"name": "page",
"value": "={{ $fromAI('page', '\"The value of page corresponds to a set of 10 results (it does not indicate the starting number of the result set). For example, page=0 corresponds to records 0-9. To return records 10-19, set page to 1, not 10.\"', 'number', 0) }}"
},
{
"name": "facet_field",
"value": "={{ $fromAI('facet_field', 'Comma-delimited list of facets Specifies the sets of facet values to include in the facets array at the end of response, which collects the facet values from all the search results. By default no facet fields will be returned. Below is the list of valid facets: section_name document_type type_of_material source day_of_week To learn more about using facets, see Using Facets.', 'string') }}"
},
{
"name": "facet_filter",
"value": "={{ $fromAI('facet_filter', 'When set to true, facet counts will respect any applied filters (fq, date range, etc.) in addition to the main query term. To filter facet counts, specifying at least one facet_field is required. To learn more about using facets, see Using Facets.', 'boolean', false) }}"
}
]
},
"toolDescription": "Article Search\n\nParameters:\n- Query parameters:\n \u2022 q (optional) - Search query term. Search is performed on the article body, headline and byline.\n \u2022 fq (optional) - \"Filtered search query using standard Lucene syntax. The filter query can be specified with or without a limiting field: label. See Filtering Your Search for more information about filtering.\"\n \u2022 begin_date (optional) - \"Format: YYYYMMDD Restricts responses to results with publication dates of the date specified or later.\"\n \u2022 end_date (optional) - \"Format: YYYYMMDD Restricts responses to results with publication dates of the date specified or earlier.\"\n \u2022 sort (optional) - \"By default, search results are sorted by their relevance to the query term (q). Use the sort parameter to sort by pub_date.\"\n \u2022 fl (optional) - \"Comma-delimited list of fields (no limit) Limits the fields returned in your search results. By default (unless you include an fl list in your request), the following fields are returned: web_url snippet lead_paragraph abstract print_page blog source multimedia headline keywords pub_date document_type news_desk byline type_of_material _id word_count\"\n \u2022 hl (optional) - Enables highlighting in search results. When set to true, the query term (q) is highlighted in the headline and lead_paragraph fields. Note: If highlighting is enabled, snippet will be returned even if it is not specified in your fl list.\"\n \u2022 page (optional) - \"The value of page corresponds to a set of 10 results (it does not indicate the starting number of the result set). For example, page=0 corresponds to records 0-9. To return records 10-19, set page to 1, not 10.\"\n \u2022 facet_field (optional) - Comma-delimited list of facets Specifies the sets of facet values to include in the facets array at the end of response, which collects the facet values from all the search results. By default no facet fields will be returned. Below is the list of valid facets: section_name document_type type_of_material source day_of_week To learn more about using facets, see Using Facets.\n \u2022 facet_filter (optional) - When set to true, facet counts will respect any applied filters (fq, date range, etc.) in addition to the main query term. To filter facet counts, specifying at least one facet_field is required. To learn more about using facets, see Using Facets."
},
"typeVersion": 4.2
}
],
"active": false,
"shared": [
{
"role": "workflow:owner",
"project": {
"id": "G5fce9xGuBAsWBXe",
"icon": null,
"name": "David Ashby <david.ashby.lds@gmail.com>",
"type": "personal",
"createdAt": "2025-06-04T02:55:02.013Z",
"updatedAt": "2025-06-04T02:56:01.361Z",
"projectRelations": [
{
"role": "project:personalOwner",
"user": {
"id": "715c1c00-cb48-4712-9a32-f1f4b6db2b30",
"role": "global:owner",
"email": "david.ashby.lds@gmail.com",
"disabled": false,
"lastName": "Ashby",
"settings": {
"npsSurvey": {
"responded": true,
"lastShownAt": 1749357655581
},
"userActivated": true,
"userActivatedAt": 1749075994495,
"easyAIWorkflowOnboarded": true,
"firstSuccessfulWorkflowId": "3N3vVikZb3MckFYm"
},
"createdAt": "2025-06-04T02:55:01.745Z",
"firstName": "David",
"isPending": false,
"updatedAt": "2025-06-08T04:40:58.399Z",
"mfaEnabled": false,
"personalizationAnswers": {
"version": "v4",
"personalization_survey_n8n_version": "1.95.3",
"personalization_survey_submitted_at": "2025-06-04T02:56:07.075Z"
}
},
"userId": "715c1c00-cb48-4712-9a32-f1f4b6db2b30",
"createdAt": "2025-06-04T02:55:02.013Z",
"projectId": "G5fce9xGuBAsWBXe",
"updatedAt": "2025-06-04T02:55:02.013Z"
}
]
},
"createdAt": "2025-07-03T17:14:21.357Z",
"projectId": "G5fce9xGuBAsWBXe",
"updatedAt": "2025-07-03T17:14:21.357Z",
"workflowId": "EYLulD1708dCvuLU"
}
],
"settings": {
"timezone": "America/New_York"
},
"createdAt": "2025-07-03T17:14:21.356Z",
"updatedAt": "2025-07-03T17:16:14.000Z",
"versionId": "9f3ca262-c9d9-49b1-9874-f9d5738f4f6b",
"isArchived": false,
"staticData": null,
"connections": {
"Search Articles": {
"ai_tool": [
[
{
"node": "Article Search MCP Server",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"triggerCount": 0
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Complete MCP server exposing 1 Article Search API operations to AI agents.
Source: https://n8n.io/workflows/5649/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Need help? Want access to this workflow + many more paid workflows + live Q&A sessions with a top verified n8n creator?
Need help? Want access to this workflow + many more paid workflows + live Q&A sessions with a top verified n8n creator?
An MCP server that exposes 10 specialized AI tools for deep observability over your OpenObserve logs and traces.
Complete MCP server exposing 4 Transportation Laws and Incentives API operations to AI agents.
Complete MCP server exposing 4 BikeWise API v2 API operations to AI agents.