Skip to main content
Glama

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 sync

Usage

Running the Server

uv run tinci-mcp

Configuring 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 analyze

  • system: 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 for

  • tone_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), overrides tone_filter

  • target_group: Find rhymes in a specific tone group, overrides tone_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

License

MIT

Available Tools

3 tools
get_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

    A4.1/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool serves a distinct purpose: converting text to Jyutping, finding rhyming characters, and analyzing tone patterns. No overlap or ambiguity.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case (get_jyutping, get_rhyming_characters, get_tone_pattern).

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers