Professor Fit MCP
Provides access to DBLP publication records, homepage URLs, and current affiliation for computer science researchers.
Optional integration for query intent analysis using LLM, including topic/domain split, synonym expansion, and spell correction.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Professor Fit MCPfind ML professors for PhD at US R1 universities"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Professor Fit MCP
帮 PhD 申请者匹配教授的 MCP server。输入研究兴趣关键词,输出带溯源与置信度的「教授匹配度」表格。
设计理念
轻服务器(Thin Server):server 只做「LLM 做不到的事」——联网取数据、跨源整合、结构化输出;语义 fit 判断交给调用方的 client LLM(Claude / Cursor)。
OpenAlex 为主干:免费、无需 API key、自带作者消歧与 h-index
多源交叉验证:OpenAlex(指标/论文/concepts)+ DBLP(主页 URL / 首发年)+ 个人主页(职称/email/lab)
诚实数据:每个关键字段带
source与confidence,拿不到就标unknown,绝不编造零 key 默认可用:核心路径无需任何 API key
Related MCP server: LitSynth MCP Server
安装
推荐使用 uv(需要 Python 3.10+):
uv venv --python 3.12
uv pip install -e ".[dev]"或使用 pip:
pip install -e .Cursor 配置
在 ~/.cursor/mcp.json 中添加(Windows 路径示例):
{
"mcpServers": {
"professor-fit": {
"command": "D:\\path\\to\\ProfessorFitMCP\\.venv\\Scripts\\professor-fit-mcp.exe",
"env": {
"OPENALEX_EMAIL": "your@email.com"
}
}
}
}Claude Desktop 配置
在 claude_desktop_config.json 中添加:
{
"mcpServers": {
"professor-fit": {
"command": "python",
"args": ["-m", "professor_fit_mcp.server"],
"env": {
"OPENALEX_EMAIL": "your@email.com"
}
}
}
}
OPENALEX_EMAIL可选——填写后 OpenAlex 进入「礼貌池」,速率更高。
使用
推荐:一键搜索(带 topic/domain 优先级)
直接用 find_professors,一次完成「意图分析 → 搜索 → 详情 → 排序 → 生成 Markdown 表格」:
帮我找 mev + defi 方向的美国 R1 院校教授Cursor / Claude 会自动拆分 topic vs domain 并调用:
find_professors(
keywords=["MEV", "DeFi"],
topic_keywords=["MEV", "maximal extractable value", "frontrunning"],
domain_keywords=["DeFi", "decentralized finance", "blockchain"],
topic_weight=3.0, # topic 命中的论文得分 ×3
domain_weight=1.0, # domain 命中的论文得分 ×1
regions=["US"],
institution_tier=["R1"],
limit=30,
since_year=2018,
)关键词优先级:topic_keywords 中的查询命中权重 ×3,确保做 MEV 的人排名远高于泛 DeFi/blockchain 研究者。Cursor 的 Claude 会从 tool docstring 中理解 topic/domain 语义,自动拆分——无需额外 LLM 成本。
返回 Markdown 表格并自动保存(路径在 saved_to 中)。
兼容模式
不提供 topic/domain 时仍可工作(向后兼容):
find_professors(
keywords=["MEV", "DeFi"],
regions=["US"],
limit=10,
)此时 server 自动分析意图:
若配置了
LLM_API_KEY→ 调用 LLM 分析 topic/domain否则 → 规则回退(多词短语=topic,单词=domain)
进阶:分步调用
需要精细控制时,可单独调用底层工具:
1. search_professors(keywords=[...], topic_keywords=[...], domain_keywords=[...], regions=["US"])
2. get_professor_details(professor_id="A5023888391")
3. rank_fit(user_interests={"keywords": [...]}, professors=[...])
4. export_table(professors=[...], format="markdown", output_path="results.md")工具
搜索与排序
工具 | 功能 |
| 推荐入口:一键完成 搜索→详情→排序→导出,结果自动沉淀到资料库 |
| 按研究方向粗筛候选教授(OpenAlex works→authors) |
| 多源详情聚合(OpenAlex + DBLP + 主页),自动写入资料库 |
| 短语匹配粗排 + 打包精排材料供 client LLM 判断 |
| 输出表格,默认 |
资料库管理
工具 | 功能 |
| 手动更新教授档案字段(主页、职位、PI 状态、研究 tag、notes) |
| 写入 WebSearch 证据并触发多源交叉验证合并 |
| 查看资料库统计、按姓名/学校/tag/验证状态查询,或查看单个教授完整档案+证据 |
| 导出资料库为 |
筛选参数
regions:US,UK/GB,JP,KR,DE,CA,AU,SG,HK,ASIA,ALLinstitution_tier:R1(美),HK5(港五校),Russell(英),Go8(澳),U15(加),TU9(德),Imperial(日),SKY(韩)topic_keywords:核心研究课题(教授必须直接做这个方向)。高评分权重。domain_keywords:领域上下文(教授在这个大领域中工作)。低评分权重。topic_weight/domain_weight:topic/domain 查询的得分倍数(默认 3.0 / 1.0)required_keywords:领域锚点(命中任一即保留)。不传时自动推断;传[]关闭闸门min_relevance:最低相关分阈值(0.0–1.0)since_year:论文起始年份(默认 current_year - 7)
精度与召回
关键词优先级:topic 查询命中的论文得分是 domain 的 3-4.5 倍,确保核心研究方向的人排名靠前,不被宽泛领域的高产作者冲淡。
召回:搜索按「topic/domain 分组查询 + 领域同义词扩展(最多 8 条)+ 深翻页(5 页×100)+ 并发解析作者(上限 200 人)」展开候选池。
机构准确性(五级回退):
OpenAlex
last_known_institutionsOpenAlex 历年
affiliations(5 年窗口)论文级 authorship 中标注的机构(最及时)
DBLP 策展 affiliation(人工维护,最准确)
InstitutionClassifier 模糊匹配
精度闸门:默认按领域核心词做 ANY-match 过滤,排除邻域误报。
主页发现策略
1. DBLP person record 的 <url> 标签 ← server,排除 scholar/orcid 等聚合站
2. OpenAlex 作者 homepage(若有) ← server,免费
3. 仍无 → 返回 homepage_search_query + ← 交 client(Cursor/Claude)的 web search
homepage_resolution 指令 补全个人/院系主页(多数教授都有主页)find_professors 的返回里含 homepage_resolution.needed 列表,client 应对其中每个 search_query 做 web 搜索补全主页(顺带可验证职称/当前任职)。
教授资料库
每次搜索/查详情会自动将教授档案写入本地 SQLite 数据库 professor_profiles.db(路径可通过 PROFESSOR_PROFILES_DB_PATH 环境变量配置)。
资料库存储:
身份:姓名、学校、国家、tier、职位、是否 PI
指标:h-index、citations、works_count、近 3 年论文
研究内容:OpenAlex concepts、研究方向 tags、最近论文(JSON)
主页:URL + 来源 + 验证时间
验证状态:
verified/needs_review/unverified
多源交叉验证
WebSearch 证据通过 add_web_search_evidence 写入,自动与 OpenAlex/DBLP 数据合并。合并按来源优先级进行:
主页 URL:院系 faculty page > 个人主页 > DBLP > OpenAlex
职位/PI:faculty page > 个人主页 > 启发式推断
机构:faculty page > OpenAlex affiliations > DBLP
来源冲突时标记 needs_review,不静默覆盖。
查看资料库
profiles_inspect() # 统计概览
profiles_inspect(name="Ari Juels") # 按姓名搜索
profiles_inspect(openalex_id="A5023888391") # 完整档案+证据
profiles_export(format="json", output_path="db.json") # 导出为文件开发
# 运行测试
uv run pytest tests/ -v环境变量
变量 | 必须 | 说明 |
| 否 | 填写后进入 OpenAlex 礼貌池,速率更高 |
| 否 | 资料库路径(默认 |
| 否 | Markdown 结果保存目录(默认项目根) |
| 否 | LLM 意图分析(仅 fallback 路径需要,Cursor 中不需要) |
| 否 | LLM API 地址(默认 OpenAI,兼容 Deepseek 等) |
| 否 | LLM 模型名(默认 |
数据源
数据源 | 角色 | API key |
OpenAlex | 主干:指标/机构/concepts/论文/作者消歧 | 否 |
DBLP | CS 发表记录、主页 URL、当前机构、首发年(全量并发查询) | 否 |
个人主页 | best-effort:职称/email/lab/招生信号 | 否 |
院校分级 | 内置 JSON(R1/HK5/Russell 等) | 否 |
LLM(可选) | 查询意图分析:topic/domain 拆分 + 同义词扩展 + 拼写纠错 | 可选 |
professor_profiles.db | 本地资料库:持久化档案 + WebSearch 证据 + 交叉验证 | 否 |
Available Tools
9 toolsadd_web_search_evidenceA
Add WebSearch evidence for a professor and optionally merge it into their profile.
Call this after using web search to find a professor's faculty page or personal homepage. The extracted fields will be stored as evidence and (if auto_merge=True) merged into the professor's profile with cross-source verification.
Args: openalex_id: The professor's OpenAlex ID source_url: URL of the evidence page source_type: One of: faculty_page, personal_homepage, lab_page, scholar_page, paper_page, news, other extracted: Dict of extracted fields. Supported keys: homepage_url, name, institution, country_code, position, is_pi, research_tags (list), recent_papers (list of dicts) source_title: Title of the evidence page snippet: Relevant text snippet from the page confidence: "high" | "medium" | "low" (default "medium") auto_merge: If True (default), automatically merge evidence into profile
Returns: dict with "evidence_id", "merged" (bool), and optionally "verification_status".
| Name | Required | Description | Default |
|---|---|---|---|
| openalex_id | Yes | ||
| source_url | Yes | ||
| source_type | Yes | ||
| extracted | Yes | ||
| source_title | No | ||
| snippet | No | ||
| confidence | No | medium | |
| auto_merge | No |
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 explaining behavior. It describes that extracted fields are 'stored as evidence' and optionally 'merged into the professor's profile with cross-source verification.' It also mentions the return format. However, it does not detail failure modes, permissions required, or the exact nature of 'cross-source verification.' Still, it provides sufficient transparency for an additive operation.
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: one purpose sentence, one usage guideline sentence, a bulleted Args list, and a return description. Every sentence adds value. The Args list is well-organized but not overly verbose. No redundant information. It is efficiently structured and easy to scan.
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's complexity (8 parameters, nested object, no output schema), the description covers inputs and output comprehensively. It explains the return dict keys (evidence_id, merged, verification_status). However, it lacks explanation of error cases, rate limits, or potential side effects (e.g., whether merging is reversible). For a tool that modifies professor profiles, this omission slightly reduces completeness.
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 description coverage is 0%, so the description must compensate fully. It does so by listing each parameter with its purpose and allowed values: e.g., 'source_type: One of: faculty_page, personal_homepage...', and for extracted, 'Supported keys: homepage_url, name, institution...' It also specifies defaults for optional parameters like confidence and auto_merge. This adds substantial meaning beyond the raw schema.
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's primary action: 'Add WebSearch evidence for a professor and optionally merge it into their profile.' It provides a specific verb ('Add') and resource ('WebSearch evidence'), and distinguishes from sibling tools like 'update_professor_profile' which update profiles without an evidence step. The purpose is unambiguous and immediately understandable.
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 explicitly states when to use the tool: 'Call this after using web search to find a professor's faculty page or personal homepage.' This provides clear context for invocation. However, it does not explicitly mention when not to use it or list alternative tools for similar tasks, though no sibling tool performs the same evidence-adding function. The guidance is useful but could be more comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_tableA
Export ranked professors as a formatted table.
Args: professors: ranked_professors list from rank_fit format: "markdown" (default) | "csv" | "json" include_summary: Include count summary (default True) output_path: Optional file path to save output
Returns: dict with "content" (string), "format", and "saved_to" (path if saved).
| Name | Required | Description | Default |
|---|---|---|---|
| professors | Yes | ||
| format | No | markdown | |
| include_summary | No | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It describes output format but does not mention if it modifies data, requires permissions, or other safety considerations.
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?
Structured with Args and Returns sections, concise, every sentence adds value with no 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?
Complete for a formatting tool: explains inputs, outputs (dict with content/format/saved_to), and ties to rank_fit. No missing information.
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%, but description fully explains each parameter: professors (from rank_fit), format (options + default), include_summary (default), output_path (optional). Adds meaning beyond schema.
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?
Description clearly states 'Export ranked professors as a formatted table' with a specific verb and resource. It ties input to rank_fit, distinguishing it from siblings like profiles_export.
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?
Implied usage from description (requires rank_fit output), but no explicit guidance on when to use this tool vs siblings like profiles_export or 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_professorsA
One-shot professor finder (RECOMMENDED entry point).
Runs the full pipeline in a single call: search candidates -> fetch multi-source details (concurrently) -> rank by relevance -> render a Markdown table.
KEYWORD PRIORITY (IMPORTANT): For precise results, split your query into topic vs domain: - topic_keywords: The specific research problem the professor MUST work on. These get scored with topic_weight (default 3x). Include synonym phrasings. Example: ["order fairness", "fair ordering", "fair transaction ordering"] - domain_keywords: The broader field/area (used as context/filter, lower weight). Example: ["blockchain", "DeFi", "decentralized finance"]
If you only provide `keywords` without topic/domain split, the server will
attempt to auto-analyze intent (via LLM if configured, else heuristics).Args: keywords: Research interest keywords (flat list, backward-compatible). topic_keywords: Core research topic terms. Professors MUST work on this. Receives topic_weight scoring boost. Include 2-4 synonym phrasings. domain_keywords: Broader field/area terms. Used as context filter. Receives domain_weight scoring (lower than topic). topic_weight: Score multiplier for topic query hits (default 3.0). domain_weight: Score multiplier for domain query hits (default 1.0). regions: Country/region codes. Supported: US, UK/GB, JP, KR, DE, CA, AU, SG, HK, ASIA, ALL institution_tier: Filter by tier, e.g. ["R1", "Russell", "HK5"] required_keywords: Domain-anchor terms for precision gating. min_relevance: Minimum relevance score (0.0-1.0) to keep a professor. limit: Max number of professors (default 10). output_path: Path to save Markdown. Auto-generated if omitted. since_year: Only papers from this year onward (default: current_year - 7).
Returns: dict with markdown, ranked_professors, total, saved_to, homepage_resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| regions | No | ||
| institution_tier | No | ||
| required_keywords | No | ||
| min_relevance | No | ||
| limit | No | ||
| output_path | No | ||
| since_year | No | ||
| topic_keywords | No | ||
| domain_keywords | No | ||
| topic_weight | No | ||
| domain_weight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the burden. It details the pipeline steps: search, concurrent multi-source detail fetching, relevance ranking, and Markdown table rendering. It also explains keyword weighting and scoring. It doesn't cover rate limits or auth, but overall it's transparent.
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 long but well-structured with a clear summary, a highlighted important section, and a bulleted args list. It front-loads the purpose and key instructions. Minor redundancy could be trimmed, but it's well-organized.
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 12 parameters and no output schema, the description is very complete. It explains the full pipeline, return value structure (including keys like markdown, ranked_professors, total), and important constraints like concurrent fetching and auto-analysis fallback.
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%, but the description extensively explains every parameter, especially the most critical ones (topic_keywords, domain_keywords, weights). It provides usage examples and clarifies the role of each parameter, far beyond the schema 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 this is a 'One-shot professor finder (RECOMMENDED entry point)' and explains it runs a full pipeline including search, concurrent fetch, ranking, and Markdown rendering. It distinguishes itself from siblings like search_professors by being the comprehensive entry point.
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 excellent guidance on how to split keywords into topic vs domain for precise results, including examples. It also explains fallback behavior if only keywords are given. While it doesn't explicitly say when not to use it or directly compare to siblings, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_professor_detailsA
Get detailed multi-source profile for a professor.
Fetches from OpenAlex (metrics, concepts, recent papers) + DBLP (homepage URL, first publication year) + homepage (position, email, lab, accepting students signal). All key fields include source and confidence metadata.
Args: professor_id: OpenAlex author ID (preferred), e.g. "A5023888391" name: Professor's name (used if professor_id not provided) university: University name to disambiguate when searching by name
Returns: Full professor profile with sourced fields (value/sources/confidence), recent papers (last 3 years), seniority estimate, and accepting_students_signal. If homepage_url is null, homepage_search_query is provided for client web search.
| Name | Required | Description | Default |
|---|---|---|---|
| professor_id | No | ||
| name | No | ||
| university | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses behavior: fetches multiple sources, includes source/confidence metadata, and provides homepage_search_query if homepage_url is null. However, it omits error handling or rate limits.
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 well-structured with a clear summary first, then bullet-like details for each argument and return values. It is concise enough but every sentence serves a purpose. Minor room for improvement in brevity.
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 3 parameters (none required) and no output schema, the description covers inputs thoroughly and explains the output fields including edge cases. It is complete for a tool of this complexity.
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%, but the description compensates well by explaining each parameter: professor_id is the preferred OpenAlex ID, name is used if ID is missing, and university aids disambiguation. This adds value beyond the schema.
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's purpose: 'Get detailed multi-source profile for a professor.' It specifies the sources (OpenAlex, DBLP, homepage) and key data points, making it distinct from sibling tools like 'search_professors' which likely performs broader searches.
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 explains when to use the tool (to get a detailed profile) and the parameter usage (preferred professor_id, fallback name+university). It does not explicitly exclude cases or name alternatives, but the context implies it for detailed profiles vs. broader searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_exportA
Export professor profiles from the local database.
Args: format: "json" (default) | "markdown" | "csv" output_path: File path to save the export. If omitted, content is returned inline. include_evidence: If True, include web_search_evidence for each professor (JSON only)
Returns: dict with "content" (string), "format", "total", and "saved_to" (path if saved).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| output_path | No | ||
| include_evidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: it explains parameter effects (e.g., omitting output_path returns inline content, include_evidence only for JSON) and describes the return dict. It doesn't cover side effects or auth but overall provides good 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 well-structured with a one-line summary, then Args and Returns sections. Every sentence is necessary and front-loaded with the main purpose. No redundant information.
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 no output schema, the description provides a return value structure (dict with content, format, total, saved_to). It covers parameter details and behavior. It lacks error handling or concurrency notes, but for a simple export tool it is largely complete.
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 fully compensates by detailing each parameter: format's allowed values (json/markdown/csv), output_path behavior, and include_evidence constraint. This adds meaning beyond the schema's types and defaults.
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 'Export professor profiles from the local database', using a specific verb and resource. This purpose distinguishes it from siblings like 'find_professors' or 'export_table'.
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 when exporting professor profile data but does not explicitly state when to use this tool over alternatives or provide exclusions. No explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_inspectA
Inspect the local professor profiles database.
With no arguments, returns database statistics (counts by tier, country, verification status). With filters, returns matching professor summaries. With openalex_id, returns the full profile and its evidence.
Args: name: Partial name match (case-insensitive) institution: Partial institution name match tag: Research tag to search for verification_status: Filter by "verified" | "needs_review" | "unverified" openalex_id: Get full profile + evidence for a specific professor
Returns: dict with "stats" and/or "profiles" and/or "profile" + "evidence".
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| institution | No | ||
| tag | No | ||
| verification_status | No | ||
| openalex_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It explains that the tool returns data (stats, summaries, full profile) with no indication of side effects, making its read-only nature clear. No destructive behavior mentioned, which is appropriate.
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 well-structured with clear sections, front-loading the overall purpose then detailing arguments. It is reasonably concise without being overly verbose.
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 5 parameters and no output schema, the description explains the return format (dict with stats/profiles/profile+evidence) and covers all arguments. It lacks details on pagination or sorting, but for a local inspection tool this is sufficient.
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%, but the description details all 5 parameters with their effects (partial name match, filter by institution, etc.), adding meaning beyond the bare schema types and defaults.
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's purpose: inspect the local professor profiles database. It distinguishes three modes (stats, filtered summaries, full profile with evidence) which differentiates it from sibling tools like find_professors or get_professor_details.
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 clear guidance on when to use each parameter: no arguments for stats, filters for summaries, openalex_id for full profile. It does not explicitly contrast with siblings, but the context of alternatives is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_fitA
Rank professors by keyword overlap and package materials for client LLM fit judgment.
SERVER SIDE: Deterministic whole-word keyword matching against concepts + paper titles/abstracts. CLIENT SIDE: Use the fit_materials in each result to produce fit_level, match_reasons, potential_concerns, and email_advice.
Args: user_interests: Dict with one of: - {"keywords": ["blockchain", "MEV"]} - {"preset": "blockchain_security"} - {"keywords": [...], "description": "free text", "paper_urls": [...]} Optionally add topic/domain weighting (same semantics as find_professors): - {"topic_keywords": [...], "domain_keywords": [...], "topic_weight": 3.0, "domain_weight": 1.0} professors: List from search_professors or get_professor_details filters: Optional: min_citation (int), regions (list), institution_tier (list) sort_by: "relevance_signal" (default) | "citation"
Returns: ranked_professors list with relevance_signal and fit_materials for client LLM.
| Name | Required | Description | Default |
|---|---|---|---|
| user_interests | Yes | ||
| professors | Yes | ||
| filters | No | ||
| sort_by | No | relevance_signal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses deterministic whole-word keyword matching and separates server-side and client-side responsibilities. However, it lacks details on potential limitations, error handling, or behaviors like what happens with no matches. Without annotations, more transparency would be beneficial.
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 somewhat lengthy but well-structured with sections for server-side, client-side, args, and returns. Each sentence serves a purpose, though some repetition could be trimmed. It balances detail with readability.
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 (4 parameters, nested objects, no output schema, no annotations), the description is quite complete. It covers input formats, output structure, and usage flow. Missing some edge cases like default filters behavior, but overall adequate.
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 carries the burden. It explains user_interests format in detail (including optional fields like preset, description, paper_urls, weighting) and briefly mentions filters and sort_by options. This adds significant value beyond the schema's generic 'object' type.
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 ranks professors by keyword overlap and packages materials for client LLM fit judgment. The verb 'rank' and resource 'professors by keyword overlap' is specific and distinguishes it from sibling tools like find_professors or search_professors.
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 explains that the input professors should come from search_professors or get_professor_details, and instructs the client to use fit_materials for judgment. It does not explicitly mention when not to use this tool, but provides clear context for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_professorsA
Search for professors matching research interests (coarse filter).
Args: keywords: Research interest keywords (flat list). topic_keywords: Core topic terms (high scoring weight). See find_professors. domain_keywords: Broader field terms (lower scoring weight). topic_weight: Multiplier for topic hits (default 3.0). domain_weight: Multiplier for domain hits (default 1.0). paper_url: Optional arXiv/DOI URL to extract keywords from. regions: Country/region codes. Supported: US, UK/GB, JP, KR, DE, CA, AU, SG, HK, ASIA, ALL university_filter: Specific university names to include. institution_tier: Filter by tier, e.g. ["R1", "Russell", "HK5"] limit: Max number of results (default 20). since_year: Only papers from this year onward (default: current_year - 7).
Returns: dict with "professors" list and "total_found".
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| paper_url | No | ||
| regions | No | ||
| university_filter | No | ||
| institution_tier | No | ||
| limit | No | ||
| since_year | No | ||
| topic_keywords | No | ||
| domain_keywords | No | ||
| topic_weight | No | ||
| domain_weight | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. The description does not disclose behavioral traits such as side effects, permissions, rate limits, or error conditions. It only describes parameters and return shape, leaving the agent uninformed about operational behavior.
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 well-structured with clear Args and Returns sections, and the main purpose is front-loaded. While it is longer than necessary, every sentence provides useful information, and there is no redundancy.
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 high parameter count and no output schema, the description covers all parameters and the return shape. It references a sibling tool for further detail. However, missing behavioral transparency and explicit usage guidelines prevent a higher score.
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%, and the description compensates thoroughly. Each parameter is explained with meaningful context (e.g., 'topic_keywords: Core topic terms (high scoring weight)', 'regions: Country/region codes. Supported: US, UK/GB, JP...'). This adds substantial value 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 'Search for professors matching research interests (coarse filter).' This provides a specific verb ('search'), resource ('professors'), and a qualifying scope ('coarse filter'), effectively distinguishing it from the sibling 'find_professors' tool.
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 hints at an alternative tool by referencing 'See find_professors' for topic_keywords, and the phrase 'coarse filter' suggests this is for broader queries. However, it does not explicitly state when to use this tool versus find_professors or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_professor_profileA
Manually update fields on a professor profile in the local profiles database.
Use this to write WebSearch-confirmed homepage URLs, verified positions, PI status, research tags, or manual notes. Only fields you provide are updated; omitted fields are left unchanged.
Args: openalex_id: The professor's OpenAlex ID (required) homepage_url: Confirmed homepage URL position: Confirmed position title, e.g. "Assistant Professor" is_pi: Whether the professor is a PI pi_verification_source: Source of PI verification, e.g. "faculty_page" homepage_verification_source: Source of homepage verification institution: Confirmed current institution name country_code: Country code, e.g. "US" institution_tier: Tier, e.g. "R1" research_tags: List of research topic tags verification_status: "verified" | "needs_review" | "unverified" manual_notes: Free-text notes
Returns: dict with "success" (bool) and "message".
| Name | Required | Description | Default |
|---|---|---|---|
| openalex_id | Yes | ||
| homepage_url | No | ||
| position | No | ||
| is_pi | No | ||
| pi_verification_source | No | ||
| homepage_verification_source | No | ||
| institution | No | ||
| country_code | No | ||
| institution_tier | No | ||
| research_tags | No | ||
| verification_status | No | ||
| manual_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states that only provided fields are updated (others unchanged) and describes the return format (dict with success and message). This is fairly transparent, though it lacks details on error conditions or whether the professor must already exist.
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 well-structured: a purpose sentence, usage guidance, a tagged Args list, and a Returns line. It is concise enough to be quickly parsed, though the Args list could be slightly more compact by grouping related parameters.
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 12 parameters, no output schema, and no annotations, the description is highly complete. It explains all parameters, the patch-like update behavior, usage context, and return format. It covers what an agent needs to invoke the tool 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?
Schema description coverage is 0%, so the description must compensate. It lists all 12 parameters with brief explanations and examples (e.g., position as 'Assistant Professor', verification_status as 'verified'|'needs_review'|'unverified'). This adds meaning beyond the bare schema, though examples are minimal.
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 'Manually update fields on a professor profile in the local profiles database.' This specifies the action (update) and resource (professor profile), distinguishing it from sibling tools like get_professor_details or find_professors that read or search.
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 advises using this tool for writing confirmed fields (homepage URLs, positions, etc.), which provides clear usage context. However, it does not explicitly state when not to use this tool or mention alternatives beyond the implicit list of sibling tools.
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. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
add_web_search_evidence - First observed
export_table - First observed
find_professors - First observed
get_professor_details - First observed
profiles_export - First observed
profiles_inspect - First observed
rank_fit - First observed
search_professors - First observed
update_professor_profile
TDQS
Each tool has a clearly distinct purpose within the professor discovery and management workflow. The descriptions are detailed and prevent confusion between similar tools like search_professors (coarse filter) and find_professors (full pipeline).
Most tools follow a verb_noun pattern (e.g., find_professors, update_professor_profile), but profiles_export and profiles_inspect use a noun_verb pattern, creating a minor inconsistency.
Nine tools cover the essential operations for professor profiling and ranking without unnecessary complexity. The count is well-scoped for the domain.
The tool set covers the core workflow of searching, fetching details, ranking, adding evidence, updating, inspecting, and exporting. Missing explicit create/delete tools, but the workflow implicitly supports creation through evidence merging.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Academic paper search, scientific literature, citation analysis, arXiv & semantic related-work.
Search 340M+ academic papers — citation graphs, semantic similarity, and AI literature reviews.
Scrape arXiv, OpenAlex and Crossref papers by author, topic, journal or DOI. Pay per row.
Search Google Scholar for academic papers, citations, and author profiles.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceEnables analysis of academic author networks and research collaborations by retrieving co-authors and research keywords from sources like Semantic Scholar, OpenAlex, Crossref, and Google Scholar.2-
- FlicenseNot gradedqualityDmaintenanceEnables intelligent academic paper discovery through ArXiv search and AI-powered semantic similarity analysis. Helps researchers find and rank the most relevant papers using natural language queries and state-of-the-art sentence transformers.-
- AlicenseBqualityFmaintenanceSearch and retrieve academic papers from arXiv and DBLP databases, with AI-powered prompts to generate comprehensive research summaries, discover related topics, and identify leading authors in any field.22MIT
- FlicenseBqualityCmaintenanceEnables automatic literature discovery, screening, and ranking across OpenAlex, Semantic Scholar, and arXiv, with tools for exporting to Zotero and generating research ideas.71-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Wrennnn2/ProfessorFitMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server