search_funders
Find funding organizations in scholarly research using OpenAlex's database. Filter by country, grant count, and other attributes to identify potential funders for academic projects.
Instructions
Search funders
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Full-text search query | |
| filter | No | Key:value OpenAlex filters. Supports entity attributes (e.g., 'country_code', 'grants_count'), IDs, and convenience filters (e.g., 'display_name.search'). Example: 'country_code:DE,grants_count:>10' | |
| sort | No | Sort field with optional :desc | |
| page | No | Page number | |
| per_page | No | Results per page (max 200) | |
| cursor | No | Cursor for deep pagination | |
| group_by | No | Group results by field | |
| select | No | Fields to return | |
| sample | No | Random sample size | |
| seed | No | Random seed | |
| mailto | No | Email for rate limits | |
| api_key | No | Premium API key |
Implementation Reference
- src/tools/searchFunders.ts:3-10 (handler)The main handler function that executes the tool's core logic: calls makeOpenAlexRequest on the /funders endpoint with provided args and formats the JSON response as MCP content.export async function searchFunders(args: any) { return { content: [{ type: "text", text: JSON.stringify(await makeOpenAlexRequest("/funders", args), null, 2) }] }; }
- src/index.ts:183-203 (schema)The tool schema definition provided in the ListTools response, specifying the inputSchema for search_funders with parameters like search, filter, pagination options, etc.{ name: "search_funders", description: "Search funders", inputSchema: { type: "object", properties: { search: { type: "string", description: "Full-text search query" }, filter: { type: "string", description: "Key:value OpenAlex filters. Supports entity attributes (e.g., 'country_code', 'grants_count'), IDs, and convenience filters (e.g., 'display_name.search'). Example: 'country_code:DE,grants_count:>10'" }, sort: { type: "string", description: "Sort field with optional :desc" }, page: { type: "number", description: "Page number" }, per_page: { type: "number", description: "Results per page (max 200)" }, cursor: { type: "string", description: "Cursor for deep pagination" }, group_by: { type: "string", description: "Group results by field" }, select: { type: "string", description: "Fields to return" }, sample: { type: "number", description: "Random sample size" }, seed: { type: "number", description: "Random seed" }, mailto: { type: "string", description: "Email for rate limits" }, api_key: { type: "string", description: "Premium API key" } } } },
- src/index.ts:293-294 (registration)The dispatch logic in the CallToolRequest handler that maps the 'search_funders' tool name to the execution of the searchFunders handler function.case "search_funders": return await searchFunders(args);
- src/index.ts:28-28 (registration)The import statement that brings the searchFunders handler into the main index file for use in tool registration and dispatch.import { searchFunders } from "./tools/searchFunders.js";