CampusIntel MCP
CampusIntel MCP
CampusIntel は、AI アシスタントに大学の研究、研究者、学術プログラム、大学広報データへの構造化されたアクセスを提供する Model Context Protocol サーバーです。OpenAlex の学術知識グラフと、U.S. Department of Education の College Scorecard を組み合わせ、すべての結果にソースへのリンクとその限界を残しています。
本プロジェクトは、研究の発見と大学の調査を目的に設計されています。入学予測や、単一の数値によるランキングの提供を目的としたものではありません。
MCP サーバーとは?
MCP サーバーは、Claude Desktop や VS Code 、MCP Inspector などの AI ホストが、推測るのではなく信頼できるツールを呼び出せるようにする小さなインプラ。AI アシスタントと外部データソスの間の安全なアダプタと考えてください。
CampusIntel は、進学アドバイスを提供するチVTボットではありません。LLM を使って大学の事実を核てにすることもありません。CampusIntel は、search_research や list_academic_programs など、明確に名前の付いた関数を公開しています。AI ホストがいつそれを呼び出すかを決定します。CampusIntel はリクエストを検証し、適切なソースから最新データを取得し、ホストが利用者に説明できる構造化されたソース付き結果を返します。
Related MCP server: OpenAlex Author Disambiguation MCP Server
リクエストの仕組み
sequenceDiagram
participant User
participant Host as AI host
participant CI as CampusIntel
participant Data as Data provider
User->>Host: "Find AI-safety research at a university"
Host->>CI: Call a typed MCP tool
CI->>CI: Validate inputs and check cache
CI->>Data: Request live, scoped data
Data-->>CI: Structured response
CI-->>Host: Normalized result with source URL
Host-->>User: Grounded answer with limitationsたとえば、AI ホストはまず search_her::unэль search_universities を呼び出し、大学名を OpenAlex の機関IDに解決します。次に、その ID を search_research または find_topic_researchers に渡します。この 2 段階のパートンにより、あいまいな名前マッチを避け、研究結果を特定の機関に結び付けることができます。
Please translate into Japanese.
Wait, the instruction becomes degenerate. No need for flow now, must translate all. The preceding works partially.
Need to not interleave.
Let me continue actual:
For clarity, replace the enclosed character: Compose.
I will just produce the final doc complete and polished below
CampusIntel MCP
CampusIntel は、AI アシスタントに大学の研究、研究者、学術プログラム、機関データへの構造化されたアクセスを提供する Model Context Protocol サーバーです。OpenAlex の学術知識グラフと、U.S. Department of Education の College Scorecard を組み合わせ、すべての結果にソースへのリンクと限界を保持します。
本プロジェクトは、研究の発見と大学の調査を目的に設計されています。入学予測や単一の数値によるランキングを提供するものではありません。
MCP サーバーとは
MCP サーバーは、Claude Desktop、VS Code、MCP Inspector などの AI ホストが、推測する代わりに信頼できるツールを呼び出せるようにする小さなインフラです。AI アシスタントと外部データソースの間をつなぐ安全なアダプターと考えてください。
CampusIntel は、大学アドバイスを提供するチャットボットではなく、LLM を使って大学の事実を捏造することもありません。search_research や list_academic_programs など、明確に名前の付いた関数を公開しています。呼び出すタイミングを決めるのは AI ホスト側です。CampusIntel はリクエストを検証し、適切なソースから最新のデータを取得し、ホストが利用者に説明できる、構造化されソースが明示された結果を返します。
リクエストの流れ
sequenceDiagram
participant User
participant Host as AI host
participant CI as CampusIntel
participant Data as Data provider
User->>Host: "Find AI-safety research at a university"
Host->>CI: Call a typed MCP tool
CI->>CI: Validate inputs and check cache
CI->>Data: Request live, scoped data
Data-->>CI: Structured response
CI-->>Host: Normalized result with source URL
Host-->>User: Grounded answer with limitationsたとえば、AI ホストはまず search_universities を呼び出して大学名を OpenAlex の機関 ID に解決し、その ID を search_research や find_topic_researchers に渡します。この 2 段階のパターンにより、あいまいな名前の一致を避け、研究結果を特定の機関に結び付けることができます。
できること
ツール | 目的 | データソース |
| 大学名を安定した OpenAlex ID に解決する | OpenAlex |
| 研究実績に加え、任意で米国の連邦指標を提供する | 両方 |
| トピック・大学・年・オープンアクセス状態で論文を検索する | OpenAlex |
| 研究者を名前と所属で検索する | OpenAlex |
| 関連する大学の論文を通じて研究者を見つける | OpenAlex |
| 米国の大学、学費、成果、Scorecard ID を検索する | College Scorecard |
| 専攻分野と学位レベルを絞り込む | College Scorecard |
| 2〜5 校を比較した結果をソース情報とともに生成する | 両方 |
| 秘密情報を漏らさずにローカルプロバイダーの設定を確認する | ローカル |
CampusIntel は、campusintel://methodology リソースと、再利用可能な research_university_fit プロンプトも公開しています。
アーキテクチャ
flowchart TD
Host["AI host or MCP Inspector"] --> Server["CampusIntel MCP server"]
Server --> Service["Validation and orchestration"]
Service --> OA["OpenAlex client"]
Service --> CS["College Scorecard client"]
OA --> Research["Institutions, works, authors"]
CS --> Federal["Programs, costs, outcomes"]プロバイダーの各クライアントには、型付き正規化、上限付きリトライ、タイムアウト、インメモリ TTL キャッシュが含まれます。クロスソースのマッチングは意図的にサービスレイヤーに分離されているため、生のプロバイダーデータと推論された関係性が混同されることはありません。
情報の出所
ソース | CampusIntel での利用用途 | 重要な背景 |
全世界の大学、学術論文、著作者、所属機関、トピック、被引用、オープンアクセスリンク | 公開された学術インデックスです。被引用数は分野や公開からの期間に大きく依存します。 | |
米国のプログラム、在籍者数、学費、入試、卒業後収入などの指標 | U.S. Department of Education が公開しています。 |
CampusIntel は、教員ページのスクレイピング、個人の学生データの利用、および出願者の評価結果を予測する主張は行いません。返却されたレコードごとにプロバイダーの URL を残すため、利用者は重要な情報を信頼する前に一次データを確認できます。
クイックスタート
1. インストール
uv をインストールし、リポジトリをクローンして同期します:
git clone https://github.com/acestein13/campusintel-mcp.git
cd campusintel-mcp
uv sync --all-extras --devuv run で始まるコマンドでは、Python 仮想環境を有効化する必要はありません。
2. プロバイダーキーの設定
.enbench .env 例をコピーし、キーを追加します:
OPENALEX_API_KEY:通常使用での利用を推奨します。OpenAlex settings で無料のキーを作成してください。COLLEGE_SCORECARD_API_KEY:米国の大学・学術プログラムツールに必須です。data.gov API key で無料キーをリクエストしてください。
OpenAlex は無料のデモンストレーション用のコンセントをサポートしています。CampusIntel は College Scorecard のキーがなくても動作しますが、米国の大学・プログラムのツールは設定エラーを返し、プロファイルは Scorecard のエンリッチメントを省略します。
キーの秘密性を保つ
実際のキーを README.md、ソースコード、コミットした .env ファイル、スクリーンショット、共有予定の MCP 設定ファイルに入れないでください。本リポジトリには .env.example のみブランクキーが含まれ、.gitignore は .env を除外しています。
OPENALEX_API_KEY と COLLEGE_SCORECARD_API_KEY を環境変数に設定するか、未コミットの .env にのみ値を置き、次に uv run campusintel-mcp を実行してください。health_check はプロバイダーが設定済みかどうかだけを報告し、秘密値を返すことはありません。
3. MCP Inspector で確認する
macOS/Linux:
set -a && source .env && set +a
uv run mcp dev src/campusintel_mcp/server.pyWindows PowerShell:
uv run mcp dev src/campusintel_mcp/server.pyWindows コマンドを実行する前に、OPENALEX_API_KEY と COLLEGE_SCORECARD_API_KEY をローカルの PowerShell セッションまたは未コミットの .env ファイルで定義してください。
Inspector はブラウザで開きます。まず search_universities から始め、返された OpenAlex ID を維持し、研究ツールに渡してください。
MCP ホストの接続
リポジトリには Claude Desktop と VS Code 用の編集可能なサンプルが含まれています。絶対パスを自分の環境に置き換え、実際のキーをコミット・共有するファイルの外に置いてください。
標準の stdio エントリは以下のとおりです:
{
"command": "uv",
"args": ["--directory", "/ABSOLUTE/PATH/TO/campusintel-mcp", "run", "campusintel-mcp"]
}Streamable HTTP と Docker
ローカルの stdio がデフォルトです。同じサーバーを Streamable HTTP で実行するには:
CAMPUSINTEL_TRANSPORT=streamable-http uv run campusintel-mcpエンドポイントは http://127.0.0.1:8000/mcp です。ホストとポートは CAMPUSINTEL_HOST と CAMPUSINTEL_PORT で変更できます。
docker build -t campusintel-mcp .
docker run --rm -p 8000:8000 \
-e OPENALEX_API_KEY \
-e COLLEGE_SCORECARD_API_KEY \
campusintel-mcp例:ワークフロー
大学の AI 安全研究を調査するために、MCP クライアントは次の操作を行えます:
search_universities(query="Carnegie Mellon University", country_code="US")を呼び出す返された ID を
search_research(topic="AI safety", institution_id="I...", from_year=2022)に渡す同じトピックと機関 ID で
find_topic_researchersを呼び出すsearch_us_collegesで連邦の学校スコア ID を解決し、list_ac剑のlist_academic_programs(query="computer science", credential_level=3)を呼び出す最終回答に、返されたソース URL と方法の注記を保持する
AI ホスト向けのプロンプト例
“ジョージア工科大学とカーネル大学の最近のロボティクス研究を比較してください。ソース論文へのリンクも含めて。”
“この大学で AI 安全に取り組む人々を探し、各人を構成する論文を表示してください。”
“この米国の大学について、学士課程のコンピュータサイエンスプログラムを列挙し、プログラミング研究と研究指標を明確に分けてください。”
ホストはツールを呼び出すべきであり、大学名だけで単一の機関を特定できると想定すべきではありません。CampusIntel が返す ID によって、その後の呼び出しが正確で再現可能になります。
ツールの仕組みと安全機構
入力検証: 空の質問、無効な地元、繰り返しの比較 ID、無効な資格レベルは、意味のあるツールエラーで拒否されます。
信頼性あるリク: プロバイダー呼び出しはタイムアウト、一時障害に対する有限界リトライ、短期インメモリキャッシュを備え、反復リクエストを減らします。
情報不足の透明性: 利用できないフィールドは
nullのままです。CampusIntel が推測値やゼロで埋めないようにします。ソースを考慮したエンリッチ: OpenAlex の機関が Scorecard のレコードと妥当な名前一致する場合にのみ米国連邦指標を追加し、その結果にラベル付けをします。
ランキングを非表示にしない: 引用数、h指数、成果は文脈を説明するための情報であり、大学の総合スコアや入学予測になるものではありません。
データに対する責任
OpenAlex の指標は学術インデックス対象のコーパスを反映します。引用の規模は分野、発行年、カバレッジによって大きく異なります。
College Scorecard の
latestフィールドは異なる報告年次枠から取得できます。トピック研究者の結果は、関係性のサンプル内でのランキングです。教員の網羅的リストや、研究者の質に関する判定ではありません。
空欄の値は
nullのままです。CampusIntel はそれを推定値で補いません。名前ベースの OpenAlex と Scorecard の照合・エンリッチはラベル付けされます。重要な判断の前には用它を検証してください。
詳細については、MCP クライアント内で同じ手順を、サーバー内の campusintel://methodology リソースから参照してください。
開発
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest --covテストスイートは、モックした HTTP トランスポートと MCP SDK のインメモリクライアントを使用しています。CI は Python 3.11 と 3.12 でのフォーマット、リンティング、厳密な型チェック、テストを実行します。
ライセンス
Released under the MIT License.
Available Tools
9 toolscompare_universitiesB
Compare two to five universities with source-aware research and U.S. federal metrics.
Args: institution_ids: Two to five OpenAlex institution IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| profiles | Yes | |
| methodology | Yes | |
| generated_from_live_data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'source-aware research' and 'U.S. federal metrics' but does not explain what these entail, how data is aggregated, whether it requires network calls, rate limits, or any side effects. The phrase 'source-aware' is vague and does not disclose potential deviations or limitations. The description does not contradict any structured data (no annotations exist), but it fails to provide meaningful behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, stating the core purpose and the input requirement in two sentences. No filler or redundant content. It is appropriately sized for a tool with a single parameter, though it sacrifices some detail for brevity. Structure is clean with an 'Args' section that mirrors the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of comparing multiple universities, the description is incomplete. While an output schema exists (not shown), the description does not explain what aspects of universities are compared (e.g., rankings, funding, research output) or what 'source-aware research' and 'federal metrics' mean. It also lacks error-handling or null-return guidance. The description is too terse to fully prepare an agent for invoking the tool correctly in diverse contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines institution_ids as an array of strings with 0% description coverage. The description compensates by specifying that IDs are OpenAlex institution IDs and the expected count (two to five). This adds meaning beyond the type definition and clarifies the format and cardinality, which is valuable for correct invocation. It doesn't cover all nuances (e.g., exact ID format), but it provides the key semantic information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Compare') and the resource ('universities'), with a specific range of two to five. It also hints at the scope ('source-aware research and U.S. federal metrics'), which differentiates it from siblings like search_universities (search) and get_university_profile (single profile). It doesn't explicitly name a sibling, but the verb and range make the purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by the action 'compare' and the range of IDs, but it does not explicitly state when to use this tool versus alternatives like get_university_profile or search_universities. No conditions, exclusions, or alternative recommendations are provided, so an agent must infer the correct context. The description is adequate but not explicit about when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_topic_researchersA
Identify researchers connected to a topic at one university using matching works.
Results are ranked by matching paper count, then citations within the returned sample. This is a discovery aid, not an exhaustive faculty directory or quality ranking.
Args: topic: Research topic or keywords. institution_id: OpenAlex institution ID. limit: Number of researchers from 1 to 25.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes | ||
| institution_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the ranking method (by matching paper count, then citations within the returned sample) and the limitation of being a discovery aid, not exhaustive. However, it does not mention the return format or any potential edge cases (e.g., empty results), though an output schema exists. It provides meaningful behavioral context but not complete coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The first sentence states the core purpose, followed by ranking and limitation notes, and then a clean Args list. It is front-loaded with the essential information and contains no fluff or repetition, maximizing readability for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values. It covers the tool's purpose, ranking behavior, limitations, and parameter semantics. While it doesn't mention prerequisites or error scenarios, these are not critical for a straightforward search tool with an output schema. Overall, it provides sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The 'Args' section adds semantic value beyond the bare schema properties. It clarifies that 'topic' can be keywords, 'institution_id' is specifically an OpenAlex ID, and 'limit' is a number from 1 to 25 (a range not present in the schema). This significantly helps an agent understand parameter usage, making it more than a repetition of schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Identify'), a resource ('researchers'), a context ('connected to a topic at one university'), and a method ('using matching works'). This clearly distinguishes it from siblings like search_researchers (general researcher search) and search_universities (institution search), leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by clarifying it is scoped to a single institution and is a 'discovery aid, not an exhaustive faculty directory or quality ranking.' However, it doesn't explicitly state when to prefer this tool over alternatives like search_researchers or when not to use it. The context is clear but exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_university_profileB
Get an institution profile with research metrics and optional U.S. federal data.
Args: institution_id: OpenAlex institution ID, such as I136199984.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| scorecard | No | |
| data_notes | No | |
| institution | Yes | |
| research_impact_h_index | No | |
| two_year_mean_citedness | No | |
| research_impact_i10_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses very little: no return format, no error behavior for invalid/missing IDs, and no explicit read-only signal. The phrase 'optional U.S. federal data' is ambiguous, since the sole input parameter cannot toggle anything — it is unclear what makes the federal data optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is compact and front-loaded, with the one-sentence purpose first followed by a docstring-style arg note. Nothing is wasted, though the 'Args:' formatting is slightly redundant with the schema listing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, output schema present), so return values need not be spelled out. However, the missing when-to-use guidance and the ambiguous 'optional U.S. federal data' clause leave an agent without a fully reliable calling context, especially given the large sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, forcing the description to compensate. It does so well by explaining that institution_id is an OpenAlex institution ID and providing a concrete example format ('I136199984'). This adds meaning the schema lacks; only the absence of accepted-format variants or range details prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('institution profile with research metrics and optional U.S. federal data'). The resource description is detailed enough that the tool reads as a direct by-ID lookup, distinct from the search/compare siblings even without an explicit differentiation line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention that this is for a known OpenAlex ID while search_universities is for name-based discovery, no exclusions, and no stated prerequisites. An agent has no signal for choosing this over the search/compare siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Report server and provider configuration without making external requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It explicitly guarantees no external requests, which is a key behavioral trait. It does not describe other behaviors like error handling or output format, but the existence of an output schema mitigates the need for format explanation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundancy. It front-loads the core purpose ('Report server and provider configuration') and appends the key constraint. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists, and the description clearly states what it does and its non-external-request behavior, nothing essential is missing. An agent can confidently invoke it without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is complete (100%) by default. The description adds no parameter semantics because none exist, which is appropriate. The baseline of 4 is justified given there is nothing to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report') and a specific resource ('server and provider configuration'), and adds a distinguishing constraint ('without making external requests'). This clearly differentiates it from sibling search tools, which are all about academic data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for use: it reports configuration without external requests, implying it is appropriate when a lightweight, side-effect-free status check is needed. While it doesn't explicitly name alternatives or exclusions, the sibling set is uniformly search-oriented, making the context obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_academic_programsA
List College Scorecard fields of study for one U.S. institution.
Args: school_id: College Scorecard school ID returned by search_us_colleges. query: Optional case-insensitive title filter, such as computer science. credential_level: Optional federal credential code from 1 through 8. limit: Number of programs from 1 to 100.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| school_id | Yes | ||
| credential_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List' and provides parameter descriptions; it does not mention that the operation is read-only, whether results are paginated, or any error conditions. This is a significant gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single-line purpose followed by a compact, well-organized Args block. Every sentence provides useful information without redundancy, and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values. It covers all input semantics and the primary use case. It could mention whether results are sorted or limited, but the limit parameter and default are in the schema. Overall it is sufficient for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an Args block that explains each parameter's meaning and constraints, such as query being a case-insensitive filter and credential_level being a code from 1 to 8. It also tells the source of school_id. Since the schema provides no parameter descriptions (0% coverage), this fully compensates and goes beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'College Scorecard fields of study for one U.S. institution.' It distinguishes itself from siblings like search_us_colleges (which searches for institutions) by emphasizing it operates on a single, known institution. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates that school_id is returned by search_us_colleges, implying a workflow of first finding a school then listing its programs. It does not explicitly mention alternatives or exclusions, but the context makes it clear when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_researchA
Search scholarly works by topic, optionally scoped to a university and date range.
Args: topic: Keywords or a research question. institution_id: Optional OpenAlex institution ID. from_year: Optional first publication year. to_year: Optional last publication year. open_access_only: Return only works OpenAlex marks as open access. limit: Number of works from 1 to 50.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes | ||
| to_year | No | ||
| from_year | No | ||
| institution_id | No | ||
| open_access_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It reveals the tool queries scholarly works via OpenAlex and offers open-access filtering, which implies read-only behavior. However, it doesn't explicitly state that it's non-destructive, mention rate limits, pagination, or what happens with no results. The description adds some context about the data source but stops short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence followed by a compact, alphabetically listed parameter breakdown. No fluff or redundancy; every line contributes value. The purpose is front-loaded, and the args are straightforward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the return format need not be explained. The description covers all parameters with semantics and the overall task. It lacks guidance on when to use this tool versus alternatives and doesn't mention any prerequisites or expected result counts, but for a simple search tool, the essential calling info is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain the parameters. It does this comprehensively: topic is defined as keywords or research question, institution_id as OpenAlex institution ID, from_year/to_year as publication year bounds, open_access_only as OpenAlex open-access filter, and limit with a range of 1 to 50. This is detailed, non-obvious, and goes well beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search', the resource 'scholarly works', and optional scoping to a university and date range. It is specific enough to distinguish from siblings like search_researchers or search_universities, though it doesn't explicitly name them. The purpose is clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when not to use it or point to sibling tools like search_researchers or find_topic_researchers for different purposes. There is no explicit comparison or exclusion, leaving the agent to infer usage context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_researchersA
Find researchers by name, optionally scoped to a last-known university affiliation.
Args: name: Researcher name or partial name. institution_id: Optional OpenAlex institution ID. limit: Number of researchers from 1 to 25.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No | ||
| institution_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the core read-only action and the parameter limit range (1–25), but does not mention output structure, rate limits, or any side effects. For a simple search tool this is minimally acceptable, but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a one-sentence summary followed by a structured Args block. The core purpose is front-loaded, and every sentence adds value without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required param), and the description covers all parameters plus the affiliation scoping nuance. Since an output schema exists, return values are not required in the description. It lacks minor details like search case-sensitivity, but these are likely implicit or covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero descriptions for parameters (0% coverage), and the description compensates fully with explicit Args explanations: 'Researcher name or partial name', 'Optional OpenAlex institution ID', and 'Number of researchers from 1 to 25'. This adds meaning well beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'find researchers by name' with optional affiliation scoping. The verb 'find' and resource 'researchers' are specific, and the mention of 'by name' naturally distinguishes it from siblings like find_topic_researchers. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by name but does not explicitly contrast with alternatives such as find_topic_researchers or search_research. No when-not-to-use guidance is provided; usage context is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_universitiesA
Find universities worldwide and return stable OpenAlex IDs for later research calls.
Args: query: Full or partial university name. country_code: Optional two-letter ISO country code, such as US or GB. limit: Number of results from 1 to 25.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| country_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verbs 'find' and 'return' imply a safe, read-only operation, and it adds useful context about stable OpenAlex IDs, indicating results are durable references for later use. However, with no annotations, it doesn't explicitly state read-only, rate limits, or failure behavior, though the search nature makes side effects unlikely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One opening sentence clearly conveys the tool's purpose, followed by a compact Args block that covers all three parameters without redundancy. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter search tool, the description provides complete invocation semantics and the output purpose. The presence of an output schema reduces the need to describe return structure. Minor omissions like pagination or sorting are not essential for a search capped at 25 results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries full responsibility for parameters. It explains query as a full or partial university name, country_code as a two-letter ISO code, and limit as a range from 1 to 25 – all meaningful additions beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find'), resource ('universities worldwide'), and the output ('stable OpenAlex IDs'). The qualifier 'worldwide' distinguishes it from the sibling search_us_colleges, making the tool's scope clear without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over siblings. It mentions 'for later research calls' as a downstream purpose, but it doesn't name alternatives like search_us_colleges for US-only queries or get_university_profile for detailed profiles, nor does it provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_us_collegesA
Find U.S. colleges and return federal College Scorecard metrics and IDs.
Args: query: Full or partial institution name. state: Optional two-letter U.S. state abbreviation. limit: Number of results from 1 to 25.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions the return type (metrics and IDs) but fails to disclose any behavioral traits such as result ordering, pagination, error handling, or any side effects. It does not state whether it's read-only or if there are limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the tool's purpose, followed by a clear list of arguments. No unnecessary text, each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the parameters and basic output, but lacks usage context (e.g., when to prefer this over search_universities) and behavioral details like result limits or error handling. With an output schema present, return structure is likely covered, but the overall completeness is average.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, and the description compensates by explaining each parameter: query as full or partial institution name, state as optional two-letter abbreviation, and limit with a range of 1-25. This adds meaning beyond the schema's property titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds U.S. colleges and returns federal College Scorecard metrics and IDs. It specifies the resource (U.S. colleges) and the data source (College Scorecard), distinguishing it from likely sibling tools that might search universities more broadly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like search_universities. It does not mention any exclusions or criteria for selecting this tool over similar search functions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.0.0- First observed
compare_universities - First observed
find_topic_researchers - First observed
get_university_profile - First observed
health_check - First observed
list_academic_programs - First observed
search_research - First observed
search_researchers - First observed
search_universities - First observed
search_us_colleges
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes, but search_universities and search_us_colleges both find institutions, potentially causing confusion. However, the descriptions clearly differentiate them by scope (worldwide vs. US-specific) and ID type (OpenAlex vs. College Scorecard).
Tool names consistently use snake_case and mostly follow a verb_noun pattern (e.g., search_universities, get_university_profile, compare_universities). The outlier is health_check, which is a compound noun rather than a verb-first phrase, but it is still clear and fits the overall style.
With 9 tools, the server is well-scoped for university research and comparison. Each tool serves a distinct purpose without excessive specialization or unnecessary bloat, covering search, profiles, research, researchers, programs, and comparisons.
The surface covers core workflows for discovering universities, researching outputs, and comparing metrics. It lacks a dedicated tool to fetch a specific researcher's full profile or a specific work by ID, but these are minor gaps that agents can work around via search_researchers and search_research.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Access the OpenAlex academic research catalog — 270M+ publications.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
OpenAlex MCP — wraps the OpenAlex API (scholarly works, free, no auth)
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables academic research through the OpenAlex API, allowing users to search for papers, authors, and institutions, retrieve citations, and fetch full-text content when available. Perfect for building intelligent research assistants that can explore academic literature and related works.87MIT
- AlicenseAqualityFmaintenanceEnables streamlined academic research and author disambiguation by providing AI agents with optimized access to the OpenAlex.org API. It supports searching for authors, resolving institutional affiliations, and retrieving scholarly works with detailed citation metrics.856MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching and retrieving scholarly works, authors, institutions, and citation networks from the OpenAlex catalog via natural language.55 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and analyze OpenAlex scholarly database for OSINT research, including works, authors, institutions, funding, citations, and collaboration networks.MIT