birthday-mcp
Click on "Deploy 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., "@birthday-mcpwho has a birthday on July 7?"
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.
名人、历史人物与动漫游戏角色生日库 (birthday-mcp)
一个完全本地化、零公网依赖的高性能生日知识库与 FastMCP 服务,专为 Hermes 及各类 Agent 和本地用户设计。
核心特性
完全本地化:查询全程运行于本地 SQLite (
data/birthday.db),正常查询过程中不访问任何公网服务。全方位覆盖:
动漫角色、漫画角色、游戏角色、Galgame / VN 角色(CharacterDB / Bangumi / VNDB)
声优、作者、导演等现实创作者人物
中国历史人物(CBDB 中国历代人物传记数据库)
全球知名人物与世界历史人物(Pantheon 2025 / HPI)
中国现代知名人物(院士、学者、作家、演员、歌手、运动员等补充库)
高性能架构:
DuckDB 用于离线海量数据清洗、多源 Join 与三级去重。
SQLite 配备专用的
birthday_index覆盖索引,单次查询毫秒级返回。FastMCP 规范暴露 4 个轻量易用的语义工具。
Related MCP server: Yomitan MCP Server
MCP 工具列表
get_birthdays(month, day, limit=50, categories=None, country=None, occupation=None):查询指定日期的生日人物列表,按知名度热度值降序。search_person(name, limit=20):根据姓名或别名(支持中文、日文、英文、拼音)模糊或精确搜索人物信息。get_person(person_id):获取人物完整多语言名称、生日历法详情、身份标签与来源记录。get_upcoming_birthdays(days=7, limit_per_day=20, categories=None):获取今天起未来 N 天内的即将生日人物。
快速上手
1. 安装与初始化
# 使用 uv 创建虚拟环境并安装依赖
uv venv --python 3.12
uv pip install -e .[dev]2. 构建本地数据库
# 运行 ETL 构建管道 (生成 data/birthday.db)
uv run birthday-etl3. 运行 FastMCP 服务
# 启动标准 stdio MCP 服务
uv run birthday-mcp在 Hermes 或 Claude Desktop 配置中加入:
{
"mcpServers": {
"birthday": {
"command": "d:/dev-code/BirthdayAll/.venv/Scripts/python.exe",
"args": ["-m", "app.main"]
}
}
}4. 运行测试套件
uv run pytestAvailable Tools
4 toolsget_birthdaysGet BirthdaysA
Query celebrities, historical figures, and anime/game characters born on a specific month and day.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | Day of month (1-31). | |
| limit | No | Max number of records to return (default 50). | |
| month | Yes | Month (1-12). | |
| country | No | Filter by nationality or region (e.g. 'CN', 'US', 'Japan', '中国'). | |
| categories | No | Filter by entity type or tags (e.g. ['real_person', 'historical_person', 'anime_character', 'game_character', 'voice_actor']). | |
| occupation | No | Filter by occupation keyword (e.g. 'actor', 'singer', 'physicist', '作家'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It does convey behavioral domain scope by naming the entity classes covered, and 'Query' signals a read-only operation, but it says nothing about result ordering, pagination behavior with the limit default, or rate limits. An output schema exists, so return shape need not be covered, but the domain scope alone is thin disclosure for a tool with zero annotation support.
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?
A single front-loaded sentence with no filler; the subject and scope come first and every clause earns its place. It is not padded with restated parameter documentation.
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?
With an output schema present and full parameter coverage, the description need not explain returns or arguments, so the remaining gap is selection context: the boundary with get_upcoming_birthdays (near-future dates) and search_person is unstated, leaving the agent to guess which date-oriented tool fits. Adequate but with a clear, selection-relevant gap.
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 100%, so every parameter (day, month, limit, country, categories, occupation) is already documented in the schema with examples such as 'CN', 'Japan', and '作家'. The description adds no syntax, format, or interaction guidance beyond that, which is the expected baseline when the schema does the heavy lifting.
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 gives a specific verb ('Query') plus the resource and its scope: entities born on a specific month and day, with the entity types enumerated (celebrities, historical figures, anime/game characters). An agent immediately understands this is a date-indexed lookup. It does not, however, explicitly distinguish itself from the sibling get_upcoming_birthdays, which a reader must infer from 'specific month and day'.
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?
Use is only implied: the phrase 'born on a specific month and day' signals the scenario (you already have a month/day pair), but there is no statement of when to prefer this over get_upcoming_birthdays or search_person, and no exclusions or prerequisites. Nothing misleading, but nothing explicitly routing the agent either.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personGet PersonB
Get complete biographical details, all alias names, full birthday records, and source lineage for a specific person ID.
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | The unique ID of the person (obtained from search_person or get_birthdays). |
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. It implies a read-only lookup by the word 'Get' and discloses the breadth of the returned record, but says nothing about behavior on an unknown ID, authentication needs, or rate limits. Adequate for a simple getter, but thin given zero annotation 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?
One front-loaded sentence with no filler; the verb and resource come first and the returned fields follow. The enumeration is slightly list-heavy but every item is informative.
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 single-parameter read tool with a fully documented schema and an output schema that defines the return shape, this is nearly sufficient. Only the absence of any when-to-use guidance keeps it from being 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 description coverage is 100% for the single person_id parameter, so the baseline is 3. The description only restates that the lookup is keyed by 'a specific person ID' and adds no format, range, or sourcing detail 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 names a specific verb ('Get') and resource ('person'), then enumerates the payload returned (biographical details, alias names, birthday records, source lineage). That field list implicitly separates it from search_person and get_birthdays, though no sibling is named outright.
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?
There is no statement of when to call this versus search_person or get_birthdays, nor any prerequisite or exclusion. The only routing hint ('obtained from search_person or get_birthdays') lives in the schema's person_id description, not the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcoming_birthdaysGet Upcoming BirthdaysC
Get persons celebrating birthdays in the upcoming N days starting from today.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of future days to look ahead (1-30, default 7). | |
| categories | No | Optional filter by entity types or tags. | |
| limit_per_day | No | Max number of persons per day (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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. It implies a read but never states ordering, whether results are grouped by day, what happens when limit_per_day truncates a day, or how timezones/'today' are resolved — all material for a date-window query.
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?
A single sentence with no filler and the time window front-loaded. It is efficient, though its brevity is part of why behavioral detail is missing rather than a virtue in itself.
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?
An output schema exists, so return format need not be explained, and all three parameters are schema-documented. However, with no annotations and no sibling differentiation, the description is thin for a tool whose behavior depends on date semantics and candidate filtering.
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 100% and each parameter is documented inline (range 1-30, defaults, category filter). The description only restates the 'N days' concept, adding nothing beyond the schema, so the baseline 3 applies.
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 and resource ('Get persons celebrating birthdays') plus the time window, so an agent knows what the tool returns. It does not distinguish itself from the sibling get_birthdays, leaving the agent to guess which of the two to call.
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?
There is no when-to-use guidance, no exclusions, and no mention of the sibling get_birthdays or search_person. The agent is given a description but no routing logic for choosing among three overlapping birthday/person tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_personSearch PersonC
Search for a celebrity, historical figure, or anime/game character by name or alias.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name, alias, nickname, or romanized name to search. | |
| limit | No | Max number of matches to return (default 20). |
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 behavioral burden, yet it discloses almost nothing. It does not state that multiple matches may be returned, whether matching is fuzzy or exact, how aliases resolve, or anything about authentication 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?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity borders on under-specification for a tool that needs routing guidance.
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?
With a full output schema and 100% parameter coverage, the description needn't explain return values, and it identifies the resource adequately. But for a search tool sitting next to get_person and two birthday tools, the absence of any disambiguation or matching-behavior context leaves a real gap.
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 100%, so both parameters (name, limit) are already documented, including aliases and the default limit of 20. The description's 'by name or alias' merely restates the schema and adds no syntax or format detail beyond it, making the baseline 3 correct.
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 (Search) and resource (person) and even enumerates the entity types it covers (celebrity, historical figure, anime/game character), so an agent knows exactly what it retrieves. However, it never distinguishes itself from the sibling get_person, which appears to be the single-result counterpart.
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 when-to-use guidance at all. The description does not say when to prefer this over get_person or how it relates to the birthday siblings, leaving the agent to infer that 'search' means fuzzy/multi-match lookup rather than exact retrieval.
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.
4 tool updates
v0.1.0- First observed
get_birthdays - First observed
get_person - First observed
get_upcoming_birthdays - First observed
search_person
TDQS
Scored across 4 tools
Each tool has a distinct purpose: upcoming birthdays, name search, detailed profile via ID, and birthdays on a specific date. There is no overlap in query type or resource.
Three tools follow a get_* pattern, but search_person uses a different verb. This is a minor deviation and remains readable.
With only 4 tools, the surface is lean but covers the core birthday lookup needs. It is slightly under what a full-featured birthday service might offer, but reasonable for the scope.
The tools cover upcoming birthdays, date-specific birthdays, name search, and detailed profiles. However, there is no way to list all people or filter by category, which might be a minor gap.
Maintenance
Related MCP Connectors
Offline, keyless lookup of the US civil aircraft registry — decode N-numbers, search records.
Offline observational astronomy: positions, rise/set, moon phases, eclipses, and seasons.
Track Bilibili creators and get the latest updates on videos, dynamics, and articles. Fetch user p…
Chinese almanac: lunar calendar, BaZi 八字, daily 宜忌, lucky-day picker, public holidays.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables recording, querying, and summarizing daily work entries with tags using a local SQLite database. Supports work logging, search, timeline queries, tag management, and automated reminders for tracking daily tasks.-
- AlicenseAqualityCmaintenanceProvides AI agents with direct access to local Yomitan dictionary databases for offline Japanese vocabulary lookups, kanji searches, and sentence tokenization. It leverages the Yomitan browser extension's API to enable rich dictionary interactions and Anki flashcard field generation.57 npm6Mozilla Public 2.0
- FlicenseNot gradedqualityDmaintenanceEnables to create notebooks and notes with tags, and perform full-text search across notes using FTS5 syntax, all stored locally in SQLite.-
- AlicenseNot gradedqualityAmaintenanceEnables offline lookup and search of the US civil aircraft registry by N-number, owner, type, or state, returning detailed aircraft and ownership information.44 npm2Apache 2.0