tinci-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., "@tinci-mcp find rhymes for 月"
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.
tinci-mcp (填詞)
An MCP (Model Context Protocol) server for Cantonese lyric writing (粵語填詞), providing pronunciation lookup, tonal pattern analysis, and rhyme lookup.
Features
Jyutping Romanization: Convert Cantonese text to Jyutping pronunciation using ToJyutping
Tonal Pattern Analysis: Analyze lyrics using the 1056/0243 classification systems for matching syllables to melody
Rhyme Lookup: Find rhyming characters based on Jyutping finals (韻母), with tone filtering options. Data sourced from Mr. Pinyin's Rhyme Table
Related MCP server: cangjie-mcp
Installation
Requires Python 3.10+ and uv.
# Clone or navigate to the project directory
cd tinci-mcp
# Install dependencies
uv syncUsage
Running the Server
uv run tinci-mcpConfiguring with Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"tinci-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/tinci-mcp", "run", "tinci-mcp"]
}
}
}Configuring with Cursor
Add to your Cursor MCP settings:
{
"mcpServers": {
"tinci-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/tinci-mcp", "run", "tinci-mcp"]
}
}
}Tools
get_jyutping
Convert Cantonese text to Jyutping romanization.
Input:
text: Cantonese text (Traditional or Simplified Chinese)
Output:
{
"text": "你好",
"jyutping": [
["你", "nei5"],
["好", "hou2"]
],
"romanization": "nei5 hou2"
}get_tone_pattern
Analyze tonal patterns for lyric writing using the 1056 or 0243 system.
Input:
text: Cantonese text to analyzesystem: Either"1056"or"0243"(default:"0243")
Output:
{
"text": "你好",
"system": "0243",
"pattern": "43",
"breakdown": [
{ "character": "你", "jyutping": "nei5", "tone": 5, "mapped": "4" },
{ "character": "好", "jyutping": "hou2", "tone": 2, "mapped": "3" }
]
}get_rhyming_characters
Find characters that rhyme with the input character (same Jyutping final/韻母).
Input:
character: A single Chinese character to find rhymes fortone_filter: How to filter by tone (default:"all")"all": Return all rhyming characters regardless of tone"same": Only return characters with the exact same tone"group": Return characters in the same tone group (1056/0243)
system: Tonal classification system ("1056"or"0243", default:"0243")limit: Maximum number of results (default:50)target_tone: Find rhymes with a specific tone (1-9), overridestone_filtertarget_group: Find rhymes in a specific tone group, overridestone_filter
Example 1: Basic rhyme lookup
// Input: character="來"
{
"input": {
"character": "來",
"jyutping": "loi4",
"tone": 4,
"tone_group": "0"
},
"final": "oi",
"rhymes": [
{ "character": "愛", "jyutping": "oi3", "tone": 3, "tone_group": "4" },
{
"character": "外",
"jyutping": "ngoi6",
"tone": 6,
"tone_group": "2"
},
{ "character": "改", "jyutping": "goi2", "tone": 2, "tone_group": "3" }
],
"total_count": 190
}Example 2: Find rhymes with a different tone
// Input: character="泉", target_tone=1
// 泉 is cyun4 (tone 4), but we want rhymes with tone 1
{
"input": {
"character": "泉",
"jyutping": "cyun4",
"tone": 4,
"tone_group": "0"
},
"final": "yun",
"target_tone": 1,
"rhymes": [
{
"character": "村",
"jyutping": "cyun1",
"tone": 1,
"tone_group": "3"
},
{
"character": "川",
"jyutping": "cyun1",
"tone": 1,
"tone_group": "3"
},
{ "character": "穿", "jyutping": "cyun1", "tone": 1, "tone_group": "3" }
],
"total_count": 74
}Example 3: Find rhymes in a different tone group
// Input: character="泉", target_group="3"
// 泉 is in group 0, but we want rhymes in group 3 (tones 1, 2, 7)
{
"input": {
"character": "泉",
"jyutping": "cyun4",
"tone": 4,
"tone_group": "0"
},
"final": "yun",
"target_group": "3",
"rhymes": [
{
"character": "忖",
"jyutping": "cyun2",
"tone": 2,
"tone_group": "3"
},
{
"character": "村",
"jyutping": "cyun1",
"tone": 1,
"tone_group": "3"
},
{ "character": "川", "jyutping": "cyun1", "tone": 1, "tone_group": "3" }
],
"total_count": 119
}Tonal Systems
The 1056 and 0243 systems group Cantonese's 9 tones into 4 categories for matching with musical notes:
Tone Numbers | 1056 Value | 0243 Value | Description |
1, 2, 7 | 1 | 3 | High tones |
4 | 0 | 0 | Low falling |
3, 5, 8 | 5 | 4 | Mid tones |
6, 9 | 6 | 2 | Low tones |
Reference: HK01 Article on Cantonese Lyric Writing
Data Sources
Jyutping Data: ToJyutping - Cantonese romanization library
Rhyme Data: Mr. Pinyin's Rhyme Table (押韻 Rhyme) - Curated rhyming characters organized by Jyutping finals (韻母), specifically designed for Cantonese lyric writing
License
MIT
Available Tools
3 toolsget_jyutpingA
Convert Cantonese text to Jyutping romanization.
Returns the Jyutping pronunciation for each character in the input text. Jyutping is the standard romanization system for Cantonese, where each syllable ends with a tone number from 1-6 (with 7-9 for entering tones).
Args: text: Cantonese text to convert (Traditional or Simplified Chinese)
Returns: Dictionary with the original text and a list of character-pronunciation pairs
Example: Input: "你好" Output: {"text": "你好", "jyutping": [["你", "nei5"], ["好", "hou2"]]}
Inputs: text (required).
get_rhyming_charactersA
Find characters that rhyme with the input character for lyrics composition.
Returns characters sharing the same Jyutping final (韻母) as the input character. This is essential for writing Cantonese lyrics where rhyming is based on the final sound of syllables.
Args: character: A single Chinese character to find rhymes for tone_filter: How to filter results by tone: - "all": Return all rhyming characters regardless of tone - "same": Only return characters with the exact same tone number - "group": Return characters in the same tone group (e.g., in the 0243 system, tones 1, 2 and 7 are in the same group (3); tones 3, 5 and 8 are in the same group (4); tones 6 and 9 are in the same group (2)) system: Tonal classification system for "group" filtering and tone display (1056 or 0243) limit: Maximum number of rhyming characters to return (default 50) target_tone: If specified, find rhyming characters with this specific tone (1-9). Overrides tone_filter. Example: character="泉" (tone 4), target_tone=1 returns rhyming characters with tone 1. target_group: If specified, find rhyming characters in this tone group. Overrides tone_filter. For 0243 system: "0" (tone 4), "2" (tones 6,9), "3" (tones 1,2,7), "4" (tones 3,5,8). Example: character="泉" (group 0), target_group="3" returns rhyming characters with tones 1, 2, or 7.
Returns: Dictionary with: - input: Info about the input character (character, jyutping, tone, tone_group) - final: The jyutping final (韻母) used for matching - rhymes: List of rhyming characters with their jyutping and tone info - count: Number of rhyming characters returned - total_count: Total available (before limit) - target_tone: (if specified) The target tone used for filtering - target_group: (if specified) The target group used for filtering
Example: Input: character="來", tone_filter="all" Returns rhyming characters like 愛 (oi3), 外 (ngoi6), 改 (goi2), etc. that share the same "oi" final.
Input: character="泉", target_tone=1
Returns rhyming characters with final "yun" but with tone 1.
Input: character="泉", target_group="3"
Returns rhyming characters with final "yun" but with tones 1, 2, or 7 (group 3).
Inputs: character (required), limit, system, target_tone, +2 more.
get_tone_patternA
Analyze the tonal pattern of Cantonese text for lyrics writing.
Converts each character's tone to the 1056 or 0243 system used in Cantonese lyric writing to match syllables with melody notes.
The 1056 system groups Cantonese tones as:
1: High tones (tones 1, 2, 7) - highest pitch
0: Low falling (tone 4) - falling pitch
5: Mid tones (tones 3, 5, 8) - middle pitch
6: Low tones (tones 6, 9) - lowest pitch
The 0243 system uses different digits but same groupings:
3: High tones (tones 1, 2, 7)
0: Low falling (tone 4)
4: Mid tones (tones 3, 5, 8)
2: Low tones (tones 6, 9)
Args: text: Cantonese text to analyze system: Tonal classification system, either "1056" or "0243"
Returns: Dictionary with: - text: Original input text - system: The system used (1056 or 0243) - pattern: Condensed tone pattern string (e.g., "1560") - breakdown: Detailed per-character analysis
Example: Input: "今天天氣", system="1056" Output includes pattern like "1516" showing the tonal contour
Inputs: text (required), system.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool serves a distinct purpose: converting text to Jyutping, finding rhyming characters, and analyzing tone patterns. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case (get_jyutping, get_rhyming_characters, get_tone_pattern).
With 3 tools, the set is focused but covers the core needs for Cantonese lyrics writing. It feels slightly minimal but still appropriate for its niche scope.
The tool set covers the essential operations for Cantonese phonetics in lyrics: pronunciation, rhyming, and tonal analysis. Minor gaps like character lookup exist but are not central.
Maintenance
Related MCP Connectors
MCP server for Chinese dictionary lookup: character definitions, pinyin, stroke order and word
MCP server for classical Chinese poetry: search poems by title, author, dynasty or verse, with full
MCP server for Chinese law lookup: statutes, regulations and articles by keyword or law name.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for Synthesizer V AI Vocal Studio, which allows LLMs to create/edit vocal tracks e.g. adding lyrics to the melody.616Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for the Cangjie programming language, providing documentation search and LSP-based code intelligence.88 PyPI5MIT
- AlicenseAqualityBmaintenanceMCP server for lyrics.com that enables searching songs by lyrics or title and retrieving full lyrics, with no API key required.3119 npmMIT
- AlicenseAqualityBmaintenanceAn MCP server that enables searching tracks and fetching lyrics, including time-synced LRC lyrics, from LRCLIB without requiring an API key.3189 npmMIT