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
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "search_institutions"
}
}Input 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";