Skip to main content
Glama
one-ade
by one-ade

名人、历史人物与动漫游戏角色生日库 (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 工具列表

  1. get_birthdays(month, day, limit=50, categories=None, country=None, occupation=None):查询指定日期的生日人物列表,按知名度热度值降序。

  2. search_person(name, limit=20):根据姓名或别名(支持中文、日文、英文、拼音)模糊或精确搜索人物信息。

  3. get_person(person_id):获取人物完整多语言名称、生日历法详情、身份标签与来源记录。

  4. 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-etl

3. 运行 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 pytest

Available Tools

4 tools
get_birthdaysGet BirthdaysA

Query celebrities, historical figures, and anime/game characters born on a specific month and day.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYesDay of month (1-31).
limitNoMax number of records to return (default 50).
monthYesMonth (1-12).
countryNoFilter by nationality or region (e.g. 'CN', 'US', 'Japan', '中国').
categoriesNoFilter by entity type or tags (e.g. ['real_person', 'historical_person', 'anime_character', 'game_character', 'voice_actor']).
occupationNoFilter by occupation keyword (e.g. 'actor', 'singer', 'physicist', '作家').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesThe unique ID of the person (obtained from search_person or get_birthdays).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of future days to look ahead (1-30, default 7).
categoriesNoOptional filter by entity types or tags.
limit_per_dayNoMax number of persons per day (default 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName, alias, nickname, or romanized name to search.
limitNoMax number of matches to return (default 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 4 tool updatesv0.1.0
    • First observedget_birthdays
    • First observedget_person
    • First observedget_upcoming_birthdays
    • First observedsearch_person

TDQS

B3.4/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency4/5

Three tools follow a get_* pattern, but search_person uses a different verb. This is a minor deviation and remains readable.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides 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.
    5
    7 npm
    6
    Mozilla Public 2.0