Koskamo

海棠诗社 MCP

A read-only, public MCP server for searching and browsing classical Chinese poetry, authors, and categories from haitang.app. It supports querying works, authors, and various classification lists like dynasties, collections, and themes without requiring authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

海棠诗社 MCP logo, by 海棠诗社Community listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by 海棠诗社
MCP endpoint (Streamable HTTP)
https://haitang.app/mcp
Vendor documentation

What you can do with it

  • Search for classical Chinese poetry by keyword
  • List authors and their works by dynasty
  • Browse poetry collections and categories
  • Retrieve detailed work content and annotations

Source and maintenance

Community listingRegistry 1.1.0
Maintenance checked

Protocol and capabilities

Server
haitang 1.1.0
MCP protocol
2025-06-18
Tools
16 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Search classical Chinese poetry with search_poetry. Browse list_dynasties, list_collections and list_types before list_works or list_authors; category is a dynasty name, tag is a kind slug, collection is an ID string from list_collections. Explore list_sorts, list_themes, list_festivals, list_solar_terms, list_cipai, list_seasons, list_geography and list_groups for other public taxonomies. Read details with get_work and get_author. Public, read-only, no authentication.

Tools

16 advertised

search_poetry
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search public classical Chinese poetry by keyword across authors and works. Returns public URLs and short excerpts. Use get_work or get_author for details.

search_poetry input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Keyword matching public authors and poetry, 1–60 characters."
    },
    "workLimit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    },
    "authorLimit": {
      "type": "integer",
      "default": 10,
      "maximum": 20,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
search_poetry annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_dynasties
Advertised by the server during the last successful anonymous check.
Advertised read-only

List all public dynasties as name/slug pairs. Use the dynasty name as category when browsing works or authors. Optional browse filters also return live facets for collections, dynasties and types; the static list stays complete.

list_dynasties input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "tag": {
      "enum": [
        "shi",
        "ci",
        "qu",
        "wen"
      ],
      "type": "string",
      "description": "Work kind slug from list_types: shi (诗), ci (词), qu (曲), wen (文)."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Dynasty name from list_dynasties, for example 唐. Not a group name."
    },
    "collection": {
      "type": "string",
      "pattern": "^[1-9]\\d{0,9}$",
      "description": "Collection ID string from list_collections, for example \"1\"."
    }
  },
  "additionalProperties": false
}
list_dynasties annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_collections
Advertised by the server during the last successful anonymous check.
Advertised read-only

List all public collections as name/slug pairs. Use the collection slug as the collection ID string when browsing works. Optional browse filters also return live facets for collections, dynasties and types; the static list stays complete.

list_collections input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "tag": {
      "enum": [
        "shi",
        "ci",
        "qu",
        "wen"
      ],
      "type": "string",
      "description": "Work kind slug from list_types: shi (诗), ci (词), qu (曲), wen (文)."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Dynasty name from list_dynasties, for example 唐. Not a group name."
    },
    "collection": {
      "type": "string",
      "pattern": "^[1-9]\\d{0,9}$",
      "description": "Collection ID string from list_collections, for example \"1\"."
    }
  },
  "additionalProperties": false
}
list_collections annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_types
Advertised by the server during the last successful anonymous check.
Advertised read-only

List all public work kinds as name/slug pairs. Use the kind slug as tag when browsing works. Optional browse filters also return live facets for collections, dynasties and types; the static list stays complete.

list_types input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "tag": {
      "enum": [
        "shi",
        "ci",
        "qu",
        "wen"
      ],
      "type": "string",
      "description": "Work kind slug from list_types: shi (诗), ci (词), qu (曲), wen (文)."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Dynasty name from list_dynasties, for example 唐. Not a group name."
    },
    "collection": {
      "type": "string",
      "pattern": "^[1-9]\\d{0,9}$",
      "description": "Collection ID string from list_collections, for example \"1\"."
    }
  },
  "additionalProperties": false
}
list_types annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_sorts
Advertised by the server during the last successful anonymous check.
Advertised read-only

List public work sort labels and slugs. A null slug means omit sort for the site default order.

list_sorts input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_sorts annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_themes
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 主题 taxonomy group with its name, slug and categories.

list_themes input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_themes annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_festivals
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 节日 taxonomy group with its name, slug and categories.

list_festivals input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_festivals annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_solar_terms
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 节气 taxonomy group with its name, slug and categories.

list_solar_terms input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_solar_terms annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_cipai
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 词牌 taxonomy group with its name, slug and categories.

list_cipai input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_cipai annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_seasons
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 时令 taxonomy group with its name, slug and categories.

list_seasons input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_seasons annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_geography
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public 地理 taxonomy group with its name, slug and categories.

list_geography input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_geography annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_groups
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the remaining public taxonomy groups: 选集, 写景, 时间, 花卉, 课本, 城市, 名山, 用典 and 书籍, with their categories.

list_groups input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {},
  "additionalProperties": false
}
list_groups annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_works
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse public works with optional collection ID, dynasty name (category), kind slug (tag), sort and page. Returns public work URLs and page metadata.

list_works input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "tag": {
      "enum": [
        "shi",
        "ci",
        "qu",
        "wen"
      ],
      "type": "string",
      "description": "Work kind slug from list_types: shi (诗), ci (词), qu (曲), wen (文)."
    },
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 1000,
      "minimum": 1,
      "description": "Page number, from 1 to 1000."
    },
    "sort": {
      "enum": [
        "views_count_asc"
      ],
      "type": "string",
      "description": "Omit for the site default descending order; views_count_asc reverses it. Collections follow curated show order."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Dynasty name from list_dynasties, for example 唐. Not a group name."
    },
    "collection": {
      "type": "string",
      "pattern": "^[1-9]\\d{0,9}$",
      "description": "Collection ID string from list_collections, for example \"1\"."
    }
  },
  "additionalProperties": false
}
list_works annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_authors
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse public authors, optionally filtered by dynasty name (category). Returns public author URLs and page metadata.

list_authors input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 1000,
      "minimum": 1,
      "description": "Page number, from 1 to 1000."
    },
    "category": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "Dynasty name from list_dynasties, for example 唐. Not a group name."
    }
  },
  "additionalProperties": false
}
list_authors annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_work
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a public work by numeric ID, including poem text, introduction, annotations, translation, collections and quotes. A missing work returns work: null.

get_work input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Positive numeric ID from a search or list result."
    }
  },
  "additionalProperties": false
}
get_work annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_author
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a public author by numeric ID and a page of their works. A missing author returns author: null.

get_author input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Positive numeric ID from a search or list result."
    },
    "page": {
      "type": "integer",
      "default": 1,
      "maximum": 1000,
      "minimum": 1,
      "description": "Page number, from 1 to 1000."
    }
  },
  "additionalProperties": false
}
get_author annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
270 ms
95th percentile latency
270 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 270 ms · metadata changed · 16 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mcp-haitang https://haitang.app/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mcp-haitang --url https://haitang.app/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mcp-haitang in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mcp-haitang": {
      "url": "https://haitang.app/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mcp-haitang": {
      "type": "streamableHttp",
      "url": "https://haitang.app/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mcp-haitang and inspect its tools.
VS Code configuration
{
  "servers": {
    "mcp-haitang": {
      "type": "http",
      "url": "https://haitang.app/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mcp-haitang https://haitang.app/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "mcp-haitang": {
      "url": "https://haitang.app/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mcp-haitang": {
      "serverUrl": "https://haitang.app/mcp"
    }
  }
}

Let your agent find its tools

Find servers like 海棠诗社 MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.