search_institutions
Search academic institutions in the OpenAlex database using queries, filters, and sorting to find universities, research centers, and educational organizations.
Instructions
Search institutions
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., 'ror', 'country_code', 'type'), IDs, and convenience filters (e.g., 'display_name.search'). Example: 'country_code:US,type:education' | |
| 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/searchInstitutions.ts:3-10 (handler)The handler function implementing the core logic of the 'search_institutions' tool. It makes an OpenAlex API request to the /institutions endpoint and returns the JSON response as text content.export async function searchInstitutions(args: any) { return { content: [{ type: "text", text: JSON.stringify(await makeOpenAlexRequest("/institutions", args), null, 2) }] }; }
- src/index.ts:120-140 (schema)The input schema and metadata for the 'search_institutions' tool, defined in the listTools handler.{ name: "search_institutions", description: "Search institutions", 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., 'ror', 'country_code', 'type'), IDs, and convenience filters (e.g., 'display_name.search'). Example: 'country_code:US,type:education'" }, 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:287-288 (registration)Registration of the 'search_institutions' tool in the callTool request handler's switch statement, dispatching to the handler function.case "search_institutions": return await searchInstitutions(args);
- src/index.ts:25-25 (registration)Import statement registering the searchInstitutions handler function for use in the MCP server.import { searchInstitutions } from "./tools/searchInstitutions.js";