CampusIntel MCP
CampusIntel MCP
CampusIntel은 AI 어시스턴트가 대학 연구, 연구자, 학술 프로그램 및 기관 데이터에 구조적으로 접근할 수 있게 해주는 Model Context Protocol 서버입니다. 데이터에 대한 출처 링크와 한계를 모든 결과에 보존하면서 OpenAlex 학술 지식 그래프와 미국 교육부의 College Scorecard를 결합합니다.
이 프로젝트는 입학 예측이나 단일 숫자 순위가 아니라 연구 발견과 대학 조사를 위해 설계되었습니다.
MCP 서버란 무엇인가요?
MCP 서버는 Claude Desktop, VS Code, MCP Inspector와 같은 AI 호스트가 추측하는 대신 신뢰할 수 있는 도구를 호출할 수 있게 해주는 작은 인프라입니다. AI 어시스턴트와 외부 데이터 소스 간의 안전한 어댑터로 생각하면 됩니다.
CampusIntel은 아니다 학원 상담 챗봇이며, 대학 정보를 지어내기 위해 LLM을 사용하지 않습니다. 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_universities를 호출하여 이름을 OpenAlex 기관 ID로 확인합니다. 그런 다음 해당 ID를 search_research 또는 find_topic_researchers에 전달합니다. 이 두 단계 패턴은 모호한 이름 매칭을 방지하고 연구 결과를 특정 기관에 연결되도록 합니다.
제공 기능
도구 | 용도 | 데이터 출처 |
| 대학 이름을 안정적인 OpenAlex ID로 변환합니다. | OpenAlex |
| 연구 활동 범위와 미국 연방 지표(선택)를 제공합니다. | Both |
| 주제, 대학교, 연도, 개방 접근 상태별로 논문을 검색합니다. | OpenAlex |
| 이름과 소속으로 연구자를 검색합니다. | OpenAlex |
| 대학의 관련 논문을 통해 연구자를 발견합니다. | OpenAlex |
| 미국 대학, 비용, 결과, Scorecard ID를 검색합니다. | College Scorecard |
| 전공과 학위 수준을 필터링합니다. | College Scorecard |
| 2~5개 학교에 대해 출처를 고려한 비교를 생성합니다. | Both |
| 비밀을 노출하지 않고 로컬 프로바이더 설정을 확인합니다. | Local |
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의 사용 용도 | 중요 컨텍스트 |
전 세계 대학, 학술 논문, 저자, 소속, 주제, 인용, 개방 접근성 링크 | 오픈 학술 지표입니다. 범위와 인용 수는 분야 및 학술지 연령에 따라 다릅니다. | |
미국 프로그램, 등록, 비용, 입학, 졸, 수료, 수입 필드 | 미국 교육부에서 발행합니다. |
CampusIntel은 교수 프로필 페이지를 스크래핑하지 않으며, 학생 개인 데이터를 사용하거나 입학 지원 결과를 예측할 수 있다고 주장하지 않습니다. 또한 각 반환된 레코드에 공급자 URL을 유지하여 사용자가 데이터에 의존하기 전에 원본 데이터를 확인할 수 있습니다.
빠른 시작
1. 설치
uv를 설치한 후 프로젝트를 클론하고 동기화하세요:
git clone https://github.com/acestein13/campusintel-mcp.git
cd campusintel-mcp
uv sync --all-extras --dev명령이 uv run으로 시작하면 가상 환경 활성화가 필요하지 않습니다.
2. 프로바이더 키 설정
.env.example을 .env로 복사한 새키를 추가하세요:
OPENALEX_API_KEY: 일반 사용에 권장합니다. OpenAlex 설정에서 무료 키를 만드세요.COLLEGE_SCORECARD_API_KEY: 미국 학교 및 학술 프로그램 도구에 필요합니다. 무료 data.gov API 키를 요청하세요.
OpenAlex는 제한된 키 없는 데모 요청을 지원합니다. CampusIntel은 College Scorecard 키 없이도 동작하지만콩실제 미국 대학/프로그램 도구는 명확한 구성 오류를 반환하고 프로필은 Scorecard 보강 정보를 생략합니다.
키 비공개 유지
실제 키를 README.md, 소스 코드, 커밋된 .env 파일, 스크린샷 또는 공유할 엔티시 설정 파일에 절대 넣지 마세요. 보고의 저장소에는 빈 보강자리만 있는 .env.example 포함되어 있고, .gitignore에서 .env가 제외됩니다.
OPENALEX_CONFIG_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 명령을 실행하기 전에 로컬 PowerShell 세션 또는 커밋되지 않은 .env 파일에서 OPENALEX_API_KEY와 COLLEGE_SCORECARD_API_KEY를 정의해야 합니다.
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)로 전달합니다.find_topic_researchers를 동그 주제와 기관 ID로 호출하여 연구자를 탐색합니다.search_us_colleges로 연방 학교 ID를 식별하고,list_academic_programs(query="computer science", credential_level=3)을 호출합니다.반환된 소스 URL과 방법론 노트를 최종 답변에 유지합니다.
AI 호스트용 예시 프롬프트
“Georgia Tech와 Carnegie Mellon의 최신 로봇 연구를 비교하세요. 그리고 각 논문을 원본 소스로 연결하세요.”
“이 대학에서 AI 안전을 연구하는 연구자를 찾고, 각 사람을 그와 관련된 논문으로 보여주세요.”
“이 미국 학교에 대해 학사 학위 컴퓨터 과목 프로그램을 나열하고, 프로그램 데이터와 연구 지표를 명확히 분리하세요.”
호스트가 실제 도구를 호출해야 하며, 대학 이름만으로 단일 기관을 식별하는 것은 부족할 수 있습니다. CampusIntel ID가 후속 호출을 정확하고 재현 가능하게 만듭니다.
도구 동작과 안전장치
입력 검증: 빈 검색어, 유효하지 않은 연도, 중복된 비교 ID, 유효하지 않은 학위 수준은 실행 가능한 도구 오류로 거부합니다.
신뢰할 수 있는 요청: 프로바이더 호출은 타임아웃, 일시적 오류에 대한 제한된 재시도, 반복 요청 줄이기 위한 단기 인메모리 캐시를 사용합니다.
누락 데이터 투명하기: 사용 불가능한 필드는
null로 남고, CampusIntel이 추정 값이나 0으로 채우지 않습니다.출처 인식 보강: OpenAlex의 기관이 Scorecard 레코드로 합리적으로 이름 매칭된 경우에만 미국 연방 지표가 추가되어 결과에 명시됩니다.
숨은 순위 없음: 인용 수, h-인덱스 값, 결과는 종합 대학 점수나 입학 예측이 아닌 추가 컨텍스트입니다.
데이터 책임
OpenAlex의 인용 수와 h-인덱스 값은 설명적 컨텍스트로, 분야와 발행 연령에 따라 크게 다를 수 있습니다.
College Scorecard의
latest필드는 다른 보고 중에서 오는 것일 수 있습니다.주제-연구자 결과는 유사한 표본 내에서 배치됩니다. 완전한 교수 디렉토리나 연구자 질 평가 판단이 아닙니다.
누락된 값은
null로 남습니다. CampusIntel는 추정하지 않습니다.이름 기반 OpenAlex-to-Scorecard 보강 정보는 명시적으로 나와 있으며, 영향을 미치는 결과 중요판단에 사용 전에 확인해야 합니다.
각 결과의 사용자 정의 문서 자체는 특정 계획 순위를 권장하지 않습니다.
MCP 클라이언트에서 동일한 가이드는 campusintel://methodology 리소스에서도 확인할 수 있습니다.
개발
uv run ruff format .
uv run ruff check .
uv run mypy src
uv run pytest --cov테스트 스위트는 모의 HTTP 전송 및 MCP SDK의 인메모리 클라이언트를 사용합니다. 이 서버에서 CampusIntel는 Python 3.11 및 3.12에서 CI에 걸쳐 포맷팅, 린트, 엄격한 타입 검사, 테스트를 실행합니다.
라이선스
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.
OpenAlex academic papers, authors and citations search via the official API. Runs on Apify.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
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.857MIT
- 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