Korean Law MCP
Search and read Korean statutes, court rulings, ordinances and treaties from the government law database
Read-only access to the Ganjoor archive of Persian classical poetry: poets, poems, metre and recitations
By Ganjoor TypeScript Local · stdio Knowledge and memoryWeb search
27 popularity score ★ 7 ↓ 90/wk
Opens the app, which asks before it adds the server.
git clone https://github.com/ganjoor/ganjoor-mcp-server.git
cd ganjoor-mcp-server
docker build -t ganjoor-mcp .claude mcp add ganjoor -- docker run --rm -i ganjoor-mcp{
"mcpServers": {
"ganjoor": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ganjoor-mcp"
]
}
}
}{
"mcpServers": {
"ganjoor": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ganjoor-mcp"
]
}
}
}{
"servers": {
"ganjoor": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ganjoor-mcp"
]
}
}
}[mcp_servers.ganjoor]
command = "docker"
args = ["run", "--rm", "-i", "ganjoor-mcp"]gemini mcp add --scope user ganjoor docker -- run --rm -i ganjoor-mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
git clone https://github.com/ganjoor/ganjoor-mcp-server.git
cd ganjoor-mcp-server
npm install
npm run buildclaude mcp add ganjoor -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'{
"mcpServers": {
"ganjoor": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
]
}
}
}{
"mcpServers": {
"ganjoor": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
]
}
}
}{
"servers": {
"ganjoor": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
]
}
}
}[mcp_servers.ganjoor]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"]gemini mcp add --scope user ganjoor node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'HTTP |
Optional: Set to true to serve streamable HTTP at /mcp instead of stdio. |
|---|---|
PORT |
Optional: HTTP port, 3000 by default. |
HOST |
Optional: HTTP bind address, 127.0.0.1 by default. |
ALLOWED_ORIGINS |
Optional: Comma-separated extra Origin values accepted in HTTP mode; loopback only by default. |
GANJOOR_API_BASE_URL |
Optional: Upstream API address, https://api.ganjoor.net by default. |
GANJOOR_SITE_BASE_URL |
Optional: Site address used to build links, https://ganjoor.net by default. |
In a container, a setting goes in with -e NAME=value after docker run.
Ganjoor MCP Server connects an assistant to the public REST API of Ganjoor (ganjoor.net), a large online archive of classical Persian poetry. Through 44 read-only tools it can list poets and their books, open a category and its poems, fetch a full poem as couplets or just its verses, and run keyword or meaning-based search scoped to a poet or category.
Beyond the texts, it exposes Ganjoor's analysis data: the metre and rhyme of a poem, other poems sharing both (the reply-poem chains of Persian verse), stanza sections, audio recitations with per-verse timing, manuscript images, editorial corrections, reader comments, the FAQ, and a graph of historical people with kinship trees and geotags. Persian text comes back as written, right-to-left, without transliteration.
Every tool returns markdown by default or JSON (also as structured content) with response_format. List tools page 1-based with page_size capped at 100; replies longer than 25,000 characters are cut and flagged. The source also sets a 30-second timeout on each upstream request (src/constants.ts), which the README does not mention. It runs over stdio by default, or as a stateless streamable HTTP server at POST /mcp when HTTP=true.
| Runtime | Node.js 18+orDocker |
|---|
Node.js 18.17 or newer, and a clone of the repository built with npm install and npm run build (the README gives no published package). The Docker route needs Docker and an image built locally from the included Dockerfile. Outbound internet access to api.ganjoor.net. No account or API key.
Read-only and anonymous: bookmarks, posting comments and submitting corrections are out of scope. ganjoor_semantic_search_poems returns a 503 when Ganjoor's embedding backend is switched off. ganjoor_list_books covers about 168 curated collections and omits some major poets, Hafez included. Paged upstream endpoints report no totals, so total is often missing. Person, place and language tags are incomplete, so an empty result may be a coverage gap. Some dates are approximate and flagged as such. The code advertises version 1.0.0 to clients while package.json and the README give 0.1.0.
Suits anyone working with Persian literature who wants an assistant to look up, quote, analyse or cross-reference classical poems: students, translators, researchers, or developers building Persian-language features. It needs no key and changes nothing, so it is low-friction to try, but it must be built from source since no ready package is named. It only reaches Ganjoor's archive; for poetry in other languages, or for writing to a Ganjoor account, pick something else.
ganjoor_list_poetsganjoor_get_poetganjoor_get_poets_by_centuryganjoor_list_booksganjoor_get_categoryganjoor_list_category_poemsganjoor_get_category_geotagsganjoor_get_category_people_graphganjoor_search_poemsganjoor_semantic_search_poemsganjoor_get_poemganjoor_get_poem_by_idganjoor_get_poem_versesganjoor_get_random_poemganjoor_get_hafez_faalganjoor_get_page_urlganjoor_get_redirect_urlganjoor_list_rhythmsganjoor_analyze_poem_rhythmganjoor_analyze_poem_rhymeganjoor_find_similar_poemsganjoor_get_poem_sectionsganjoor_get_sectionganjoor_get_related_sectionsganjoor_get_couplet_sectionsganjoor_get_language_tagged_sectionsganjoor_search_recitationsganjoor_get_recitationganjoor_get_recitation_sync_infoganjoor_get_poem_recitationsganjoor_get_category_top_recitationsganjoor_list_peopleganjoor_get_personganjoor_get_person_poemsganjoor_get_person_relationsganjoor_get_person_family_treeganjoor_get_recent_commentsganjoor_list_faq_categoriesganjoor_get_faq_itemsganjoor_get_faq_itemganjoor_get_poem_imagesganjoor_get_poem_quoted_poemsganjoor_get_poem_effective_correctionsganjoor_get_poem_geotags