jbdb-api/SKILL.md
Query the Japan Biographical Database (JBDB) API to retrieve biographical data about historical Japanese figures. Use this skill when searching for information about Japanese historical figures, samurai, monks, artists, poets, or other individuals. Applicable for queries about biographical details, kinship relations, non-kinship associations, events, personal history, occupations, or when users mention specific Japanese names or JBDB person IDs.
npx skillsauth add kltng/humanities-skills jbdb-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Query the Japan Biographical Database for historical Japanese figures via the LoopBack REST API.
API base URL:
https://jbdb.jp/api
Response structure is flat (unlike CBDB's nested format):
GET /BiogMains → returns array of person objects directly
GET /BiogMains/{id} → returns a single person object
LoopBack filter syntax — all query filtering uses a JSON filter parameter:
GET /BiogMains?filter={"where":{"cName":"松尾芭蕉"}}
Name fields: Each person has three name variants:
cName — Japanese characters (e.g., 松尾芭蕉)cNameFurigana — Furigana reading (e.g., まつおばしょう)cNameRomaji — Romanized name (e.g., Matsuo Basho)Encoding: Pass Japanese characters as UTF-8 directly — do not URL-encode into hex.
Use scripts/jbdb_api.py for programmatic access (zero dependencies):
from scripts.jbdb_api import JBDBAPI
api = JBDBAPI()
# By name (Japanese, furigana, or romaji — searches all name fields)
persons = api.search_by_name("松尾芭蕉")
persons = api.search_by_name("Matsuo Basho")
# By ID (most precise)
person = api.query_by_id(12345)
# Extract structured data
alt_names = api.get_alt_names(person_id) # alternative names
kinship = api.get_kinship(person_id) # family relations
nonkinship = api.get_nonkinship(person_id) # non-family associations
events = api.get_events(person_id) # events involving this person
history = api.get_personal_history(person_id) # personal history records
# Formatted summary
print(api.summarize(person))
The script handles rate limiting, retries, and LoopBack filter construction automatically.
Search by Japanese name:
https://jbdb.jp/api/BiogMains?filter={"where":{"cName":"松尾芭蕉"}}
Search by romaji (regex, case-insensitive):
https://jbdb.jp/api/BiogMains?filter={"where":{"cNameRomaji":{"regexp":"/Matsuo/i"}}}
Search across all name fields:
https://jbdb.jp/api/BiogMains?filter={"where":{"or":[{"cName":{"regexp":"/芭蕉/i"}},{"cNameFurigana":{"regexp":"/ばしょう/i"}},{"cNameRomaji":{"regexp":"/Basho/i"}}]}}
Query by ID:
https://jbdb.jp/api/BiogMains/12345
Get kinship for a person:
https://jbdb.jp/api/KinData?filter={"where":{"cPersonid":12345}}
Priority: ID > exact Japanese name > regex search (regex may return many matches).
Multiple results: Use additional context (dates, occupation, place) to identify the correct person. If ambiguous, present options to the user.
Empty results: Returns [] for find operations or 404 for findById. Try alternative name forms (kanji vs romaji vs furigana).
Key BiogMain fields: cPersonid, cName, cNameFurigana, cNameRomaji, cFemale, cByNengoYear, cByNengoCode, cDyNengoYear, cDeathAge, cOccupationCodes, cStatusCodes, cPlaceCode, cNotes
The API uses numeric codes that map to descriptive values. Use these endpoints to resolve codes:
| Code Field | Lookup Endpoint | Description Fields |
|---|---|---|
| cOccupationCodes | /OccupationCodes/{id} | cOccupationDesc, cOccupationDescTrans |
| cStatusCodes | /StatusCodes/{id} | cStatusDesc, cStatusDescTrans |
| cPlaceCode | /PlaceCodes/{id} | cPlaceName, cPlaceNameRomaji |
| cByNengoCode | /NengoCodes/{id} | cNengoName, cNengoNameRomaji |
| cKinCode | /KinshipCodes/{id} | cKinrel, cKinrelTrans |
| cNonkinCode | /NonkinshipCodes/{id} | cNonkinrel, cNonkinrelTrans |
references/api_reference.md — Complete endpoint specs, all parameters, response schemasscripts/jbdb_api.py — Python client with rate limiting and structured data extractiondevelopment
Query the China Biographical Database (CBDB) locally via SQLite for biographical data on 656K+ historical Chinese figures from the 7th century BCE through the 19th century CE. Use when searching for Chinese historical figures, scholars, officials, or literary figures — their biographical details, family/kinship networks, official postings, social associations, examination records, or addresses. Runs entirely locally after initial database download (~556 MB). Faster and more flexible than the API version.
development
Interact with a local Zotero 8 desktop application through its HTTP API at localhost:23119. Use this skill whenever the user wants to search, fetch, add, edit, or organize bibliographic items in their Zotero library, import citations (BibTeX, RIS, etc.), attach files, manage collections and tags, or retrieve full-text content from Zotero. Triggers on mentions of Zotero, citation management, reference libraries, bibliographic databases, or local library management. Also use when chaining with other catalog skills (Harvard, LOC, HathiTrust, etc.) to save found records into the user's Zotero library.
development
Search for items and properties on Wikidata and retrieve entity details, claims, and external identifiers. Supports both keyword search (Wikidata Action API) and semantic/hybrid search (Wikidata Vector Database), plus direct entity retrieval (Special:EntityData) and structured querying (WDQS SPARQL).
testing
Query and explore the TGAZ (Temporal Gazetteer) SQLite database of 82,000+ historical Chinese placenames spanning 763 BCE to 1911 CE. Use this skill whenever the user asks about historical Chinese places, administrative geography, dynastic jurisdictions, place name evolution, or wants to query tgaz.db. Also trigger when the user mentions CHGIS, TGAZ, historical gazetteer, Chinese historical GIS, or asks questions like "what was X called in dynasty Y", "what counties existed in year Z", "where was X located", or any spatial/temporal query about Chinese historical geography. This skill is relevant even for casual questions like "tell me about ancient Chang'an" or "Tang dynasty cities near the Yellow River".