yomi
OfficialYomi (読み) — der persönliche LINE-MCP-Server
Yomi ist ein Open-Source-LINE-MCP-Server für dein persönliches Konto. Lies, antworte, sende Bilder und durchsuche jede Unterhaltung von Claude oder einem beliebigen lokalen KI-Agenten — ohne Browser, Bot-Konto oder LINE-eigenen Client.
Der Name lässt sich auf mehr als eine Weise lesen. 読み (yomi) — eine Lesart: nicht nur das Parsen deiner Nachrichten, sondern das Lesen der Situation, so wie du es tust. 詠み (yomi) — rezitieren: es liest nicht still, es liest dir Dinge vor. Und 黄泉 (yomi) — das unerreichbare Reich; genau das yomi in 黄泉帰り (yomigaeri), „Rückkehr aus Yomi." Wie ein Bote, der zwischen zwei Reichen wandert, durchdringt Yomi Versiegelung und Stille, um Nachrichten, die tief in deinen Unterhaltungen noch lesbar sind, wieder ans Licht zu bringen. Es beschwört keine bereits verlorene Geschichte herauf; es hilft, dass das, was nicht verschwunden ist, wieder gesehen wird.
Im Gegensatz zum offiziellen LINE-Bot-MCP-Server, der KI-Agenten über die Messaging-API mit einem LINE-Official-Account verbindet, verbindet sich Yomi als sekundäres Gerät mit deinem bestehenden persönlichen LINE-Konto und deinen Unterhaltungen.
Yomi spricht direkt LINEs TCompact-über-HTTPS-Protokoll, entschlüsselt Letter-Sealing
(E2EE)-Nachrichten und -Medien und stellt das Ergebnis jedem KI-Agenten über einen kleinen
stdio-MCP-Server zur Verfügung. Richte Claude Desktop (oder einen
beliebigen MCP-Client) darauf aus, und der Agent kann dein LINE so nachvollziehen, wie du es tust —
lesen, antworten, ein Bild senden, jemanden erwähnen und deine gesamte Historie lokal durchsuchen — und
mit get_insight die Situation lesen: welche Unterhaltungen auf deine Antwort warten, wer deine Welt
zusammenhält und was überfällig ist.
Keine offizielle API, kein Bot-Konto, kein Webhook. Yomi meldet sich als sekundäres Gerät auf deinem eigenen Konto an.
Anleitungen: Was ist ein LINE-MCP-Server? · LINE MCP 是什麼?Yomi、官方 Bot 與桌面自動化的差異.
Inoffiziell. Yomi ist ein unabhängiges persönliches Projekt, das weder mit LINE verbunden ist noch von LINE unterstützt wird. Die Nutzung kann gegen die Nutzungsbedingungen von LINE verstoßen, und das Ausführen eines zusätzlichen Clients auf deinem Konto birgt das Risiko von Rate-Limiting oder Sperrung. Es ist für das Lesen deines eigenen Kontos gedacht. Nutzung auf eigenes Risiko. Siehe Haftungsausschluss.
Erste Schritte
Native-Desktop-Vorschau
Yomi Desktop bringt den LINE-Posteingang und den lokalen Agenten-Arbeitsbereich in einer nativen App zusammen.
Es enthält eine eigene Laufzeit: Benutzer müssen Node nicht installieren, kein Terminal öffnen, dieses
Repository nicht klonen oder YOMI_RUN_MJS konfigurieren. Native Desktop ist getrennt von der unten
beschriebenen Claude-Desktop-MCPB-Erweiterung.
Plattform | Paket für allgemeine Benutzer | Signierstatus | Installationserfahrung |
macOS 14+, Apple Silicon |
| Developer-ID-signiert und Apple-notarisiert | DMG öffnen → Yomi in Programme ziehen → Yomi öffnen |
Windows 10/11 x64 |
| Vertrauenswürdige OSS-Signieranwendung in Arbeit | Download bleibt bis zum Bestehen von Signierung und Installer-Smoke-Test nicht verfügbar |
Das macOS-Paket wurde über den echten Download-Pfad getestet: quarantäniertes DMG, Installation in
/Applications, Gatekeeper-Prüfung, erster Start, Nachrichtenaktualisierung mit gebündelter Laufzeit und
LINE-Anmeldeformular ohne Terminal. Der Windows-Installer enthält den entsprechenden In-App-Telefon-/PIN-
Anmeldeablauf und wird vor der Veröffentlichung auf einem nativen Windows-Runner getestet.
Desktop-Builds sind experimentell und inoffiziell. LINE-Änderungen können sie beschädigen, und das Ausführen eines zusätzlichen Clients kann ein Konto gefährden. Bevorzuge ein Testkonto und halte ein aktuelles Backup bereit. Vorschau-Installer werden nur als GitHub-Pre-Releases veröffentlicht, nachdem die Plattformsignierung verfügbar ist.
Siehe den Desktop-Release-Prozess, Code-Signierungsrichtlinie und Datenschutzrichtlinie.
MCP-Server und Desktop-Erweiterung
Du benötigst Node.js und ein LINE-Konto. Yomi läuft lokal über npx; du musst dieses
Repository nicht klonen, Bun installieren oder etwas bauen. Führe zuerst node --version aus und installiere
das aktuelle LTS, wenn der Befehl fehlt oder die Version nicht unterstützt wird.
Yomis lokaler Suchindex verwendet das in Node integrierte node:sqlite, daher benötigt es
v22.13 oder neuer — außer v23.0–v23.3, die neuer als v22.13 sind, aber dieses Modul noch nicht enthalten
(es wurde in 22.13.0 und 23.4.0 entflaggt). Jedes aktuelle LTS
ist in Ordnung. Dies ist engines.node in package.json; der Rest von Yomi läuft auf älterem Node, aber
Suche, Scope und Capture nicht.
⚠️ Yomi benötigt einen Client, der es auf deinem eigenen Rechner ausführt. Nur-Cloud-Tools (ChatGPT, Claude.ai-Web) können Yomi nicht ausführen. Konfiguriere Yomi in Claude Desktop oder Claude Code, und es funktioniert sowohl im Chat als auch in Cowork, weil Desktop Yomi auf deinem Rechner startet und Coworks lokale Sitzungen es laden. Bitte Cowork nicht, Yomi für dich zu installieren: Coworks Shell läuft in einer Wegwerf-VM, nicht auf deinem Rechner, also ist alles, was es dort installiert, verschwunden, wenn die Sitzung endet. Folge den Schritten unten selbst, in deinem eigenen Terminal.
Wähle den Client, den du tatsächlich verwendest, und folge nur diesem Abschnitt. Claude Code und Claude Desktop haben separate MCP-Einstellungen; das Konfigurieren des einen konfiguriert nicht das andere.
Der einfachste Weg und der einzige, der überhaupt keine Befehlszeile benötigt. Claude Desktop bringt eine eigene Node-Laufzeit mit, also muss nichts anderes installiert werden.
Lade das Bundle für deinen Rechner vom neuesten Release herunter:
Rechner
Datei
Windows (Intel/AMD)
yomi-win32-x64.mcpbMac (Apple Silicon)
yomi-darwin-arm64.mcpbLinux (x64)
yomi-linux-x64.mcpbÖffne in Claude Desktop Einstellungen → Erweiterungen und ziehe die heruntergeladene Datei auf diese Seite (oder doppelklicke einfach auf die Datei).
Überprüfe, was verlangt wird, und klicke auf Installieren.
Starte eine Unterhaltung und sage "bei LINE anmelden". Yomi zeigt ein Formular, du gibst deine Telefonnummer ein und bestätigst auf deinem Telefon. Kein Terminal zu irgendeinem Zeitpunkt.
Dies überspringt die Konfigurationsdatei vollständig, was auch den unten beschriebenen Windows-MSIX-Fehler umgeht.
Hinweis für Cowork-Benutzer: Bitte Cowork nicht, Yomi für dich zu installieren. Coworks Shell läuft in einer Wegwerf-VM — nicht auf deinem Rechner — und es wird nicht in dein echtes Terminal tippen. Installiere das Bundle selbst mit den drei Klicks oben; sobald es installiert ist, können Coworks lokale Sitzungen Yomi wie jedes andere Tool verwenden.
Finde den vollständigen Pfad zu
npx:macOS / Linux: which npx Windows: where npxÖffne die Claude-Desktop-Konfigurationsdatei:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json⚠️ Windows: Der dokumentierte Pfad ist möglicherweise nicht der, den Claude tatsächlich liest. Claude Desktop wird als MSIX-Paket ausgeliefert, dessen Dateisystem virtualisiert ist. Die App liest ihre Konfiguration von
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.jsonwährend Einstellungen → Entwickler → Konfiguration bearbeiten die unvirtualisierte
%APPDATA%\Claude\-Datei öffnet. Es sind zwei verschiedene Dateien, die nie synchronisiert werden, also wird eine korrekte Yomi-Konfiguration, die in den dokumentierten Pfad geschrieben wird, **still ignoriert** — kein Fehler, kein Log, Yomi erscheint einfach nie. Dies ist claude-code#26073, noch offen. Wenn Yomi nach einem Neustart nicht erscheint, schreibe dieselbe Konfiguration auch in denLocalCache-Pfad oben. (Nicht anwendbar auf Claude Code oder auf Desktop, das außerhalb von MSIX installiert ist.)Füge Yomi unter
mcpServershinzu und ersetze den Beispiel-commanddurch den vollständigen Pfad aus Schritt 1. Unter Windows erfordert JSON, dass jedes\im Pfad als\\geschrieben wird:
{
"mcpServers": {
"yomi": {
"command": "/opt/homebrew/bin/npx",
"args": ["@rikaidev/yomi"]
}
}
}Zum Beispiel kann ein Windows-Pfad wie
"C:\\Program Files\\nodejs\\npx.cmd" aussehen. Verwende den Pfad, der auf deinem eigenen
Rechner gemeldet wird, anstatt eines der Beispiele blind zu kopieren.
⚠️ Das
npx, das du hier angibst, entscheidet nicht, welches Node Yomi ausführt. Auf macOS und Linux istnpxein Skript, das mit#!/usr/bin/env nodebeginnt, also führt es dasnodeaus, das zuerst auf Claude DesktopsPATHkommt — nicht das Node, das neben demnpxinstalliert ist, auf das du gerade gezeigt hast. Desktop erbt seinenPATHvon der Desktop-Sitzung, die oft nicht die deines Terminals ist, und Versionsmanager (nvm, fnm, asdf, volta, …) stellen ihr eigenesnodevor alles andere. Also kannwhich npxeine perfekt moderne Installation melden, während Yomi trotzdem auf einem alten Node startet.Das Symptom ist spezifisch: Anmelden, Lesen und Senden funktionieren alle, aber Suche, Scope und Capture schlagen fehl, und das Log sagt
No such built-in module: node:sqlite. Yomi druckt die Laufzeit, die es tatsächlich erhalten hat, in diesem Fehler — lies es, anstatt anzunehmen.Die Lösung besteht darin, dem Server einen
PATHzu geben, dessen erster Eintrag ein unterstütztesnodeenthält:"yomi": { "command": "<the npx path from step 1>", "args": ["-y", "@rikaidev/yomi"], "env": { "PATH": "<dir holding a supported node><sep><a base PATH>" } }Trennzeichen:
:auf macOS/Linux,;auf Windows. Behalte eine nutzbare Basis danach (/usr/local/bin:/usr/bin:/binoder das Äquivalent deiner Plattform) — dies ersetzt denPATHdes Servers, anstatt ihm voranzustellen, undnpxbenötigt die gewöhnlichen Werkzeuge.Die Angabe eines absoluten
nodeincommandfunktioniert nicht, so plausibel es auch aussieht:npxstartet das eigene Bin des Pakets als Kindprozess und löstnodeerneut ausPATHdafür auf, also wähltcommandnur aus, wernpxausführt, nicht wer Yomi ausführt. Das Setzen vonPATHist das, was tatsächlich den Server erreicht.
Konfigurierst du das mit einem KI-Agenten? MCP-Konfigurationen werden heutzutage meist von Agenten
geschrieben statt von Hand, also sind die obigen Schritte für einen Menschen formuliert, der seinen eigenen
Rechner liest. Ein Agent sollte die Werte auflösen, anstatt Platzhalter auszugeben,
und dieses Setup hat eine Falle, die es wert ist, klar ausgesprochen zu werden: Das Benennen von npx in command
pinnt die Laufzeit nicht. Vorgehen:
Finden Sie eine Node, die tatsächlich das Modul hat, das Yomis Index benötigt – leiten Sie es nicht aus einer Versionsnummer ab:
node -e 'require("node:sqlite")' && command -v node # POSIX node -e "require('node:sqlite')" && where node # WindowsWenn es einen Fehler wirft, ist diese Node für Suche/Scope/Capture unbrauchbar. Probieren Sie die anderen Installationen (
which -a node,nvm ls,fnm list, …) aus, bis eine funktioniert; erst dann fahren Sie fort.Schreiben Sie das Verzeichnis dieser Node in
env.PATH, gemäß dem obigen JSON, und behalten Sie danach ein Basis-PATHbei. Ermitteln Sie das Verzeichnis auf dem Zielrechner (dirnamedes Pfads aus Schritt 1); kopieren Sie kein Beispiel aus dieser README – es sind Apple-Silicon-Homebrew-Pfade und fast überall falsch.Setzen Sie stattdessen nicht ein absolutes
nodeincommand. Es liest sich wie die stärkere Lösung und ist es nicht:npxstartet das Binärskript des Pakets als Kindprozess und löstnodefür dieses erneut ausPATHauf, sodasscommandnur entscheidet, wernpxausführt. Das wurde gemessen, nicht angenommen – mit einem Node 20 zuerst inPATHergab das Pinnen voncommanddem Server trotzdem Node 20.command -vkann auch einen Wrapper statt einer echten Binärdatei zurückgeben – Heap-Shims, lokalenpx-Wrapper und Versionsmanager-Stubs sind alle üblich, und einige verhalten sich je nach Arbeitsverzeichnis des Clients unterschiedlich. Versuchen Sie nicht, sich zum „echten" durchzudenken. Schritt 3 klärt das.Verifizieren Sie mit einem Tool, das den Index berührt.
yomi versionist keine Verifizierung – es gibt eine Zeichenkette aus, ohne SQLite zu öffnen, und funktioniert daher auf einer Node, die keine Suche ausführen kann. Rufen Sieget_scope_policyauf: Es benötigt SQLite und keinen LINE-Login. Wenn es den Richtlinientext zurückgibt, ist die Laufzeit korrekt. Wenn es fehlschlägt, nennt der Fehler die Node, die tatsächlich ausgeführt wurde, und was sie benötigte.Beenden Sie Claude Desktop vollständig und öffnen Sie es erneut. Bestätigen Sie, dass Yomi unter Einstellungen → Entwickler geladen ist, bevor Sie etwas anderes tun: Wenn Yomi dort nicht aufgeführt ist, hat Claude Ihre Konfiguration nie gelesen – unter Windows siehe die MSIX-Warnung in Schritt 2. Sobald es aufgeführt ist, sind die Tools sowohl im Chat als auch in Coworks lokalen Sitzungen verfügbar.
Sie müssen für dieses Setup nicht Claude Code installieren.
claude mcp add yomi -- npx @rikaidev/yomiStarten Sie eine neue claude-Sitzung. Die Yomi-Tools sollten automatisch erscheinen. Dieser Befehl konfiguriert nur Claude Code; er konfiguriert nicht Claude Desktop.
Diese Form überlässt die Laufzeit PATH, was in Ordnung ist, solange das node, das Ihre claude-Sitzung auflöst, eine unterstützte Version ist – es ist derselbe PATH, den Sie sehen können, anders als bei Claude Desktop. Überprüfen Sie mit node -e 'require("node:sqlite")'. Wenn es einen Fehler wirft oder Sie überhaupt nicht von PATH abhängig sein möchten, benennen Sie die Node explizit:
claude mcp add yomi -e PATH="$(dirname "$(command -v node)"):$PATH" -- npx -y @rikaidev/yomiVerifizieren Sie in jedem Fall mit get_scope_policy statt mit yomi version: Der Versionsbefehl gibt eine Zeichenkette aus, ohne SQLite zu öffnen, und besteht daher auf einer Node, die keine Suche ausführen kann.
Führen Sie Claude Code in einem Klon dieses Repos aus? Geben Sie die Spec als
@rikaidev/yomi@latestan. Ohne Tag suchtnpxzuerst nach einem lokalen Binärskript, und in diesem Repo deklariertpackage.json"bin": {"yomi": ...}, während nichts es innode_modules/.binverlinkt – also überspringtnpxdie Installation und endet mitsh: yomi: command not found. Ein explizites Tag bewirkt, dass das veröffentlichte Paket abgerufen wird. Betrifft nur Arbeitskopien von Yomi selbst; überall sonst ist die Form ohne Tag in Ordnung.
Diese Standardkonfiguration funktioniert in den meisten MCP-Clients:
{
"mcpServers": {
"yomi": {
"command": "npx",
"args": ["@rikaidev/yomi"]
}
}
}Cursor Settings → MCP → Add new MCP Server → benennen Sie es yomi, Befehlstyp, Wert: npx @rikaidev/yomi
Oder fügen Sie es zu .cursor/mcp.json in Ihrem Projektstamm hinzu.
Fügen Sie zu .vscode/mcp.json hinzu:
{
"servers": {
"yomi": {
"command": "npx",
"args": ["@rikaidev/yomi"]
}
}
}Fügen Sie zu ~/.config/opencode/opencode.json hinzu:
{
"mcp": {
"yomi": {
"type": "local",
"command": ["npx", "@rikaidev/yomi"],
"enabled": true
}
}
}codex mcp add yomi npx @rikaidev/yomiOder fügen Sie zu ~/.codex/config.toml hinzu:
[mcp_servers.yomi]
command = "npx"
args = ["@rikaidev/yomi"]Fügen Sie zu cline_mcp_settings.json hinzu:
{
"mcpServers": {
"yomi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@rikaidev/yomi"]
}
}
}Fügen Sie zu ~/.codeium/windsurf/mcp_config.json hinzu — dieselbe JSON wie die Standardkonfiguration.
amp mcp add yomi -- npx @rikaidev/yomiAdvanced settings → Extensions → Add custom extension → benennen Sie yomi, Typ STDIO, Befehl: npx @rikaidev/yomi
grok mcp add yomi -- npx @rikaidev/yomiErste Anmeldung
Sobald die Verbindung hergestellt ist, sagen Sie dem Agenten:
„Loggen Sie sich bei LINE ein – meine Nummer ist +8869XXXXXXXX."
Bestätigen Sie das Gerät auf Ihrem Telefon (siehe Anmelden), und:
„Fassen Sie meine ungelesenen LINE-Nachrichten zusammen und sagen Sie mir, wer auf eine Antwort wartet."
Related MCP server: LINE Bot MCP Server (SSE Support)
Was Sie tun können
Yomi stellt 20 Tools über MCP bereit (die, die es wert sind, genannt zu werden; siehe die Tabellen). Große Leseergebnisse verwenden token-effizientes TOON; kleine Status- und Schreibergebnisse verwenden kompaktes JSON. Fehler bleiben Klartext und Medien verwenden native MCP-Bild-/Audio-/Ressourceninhalte.
„Ehrlicher Fehler" unten bedeutet einen expliziten Fehlschlag, der das Problem benennt (z. B. missing_decrypt_material) – Yomi erfindet nie einen Fallback, einen Platzhalter oder einen vorgetäuschten Erfolg.
Lesen
Tool | Funktion |
| Einmalig: jede Konversation mit ungelesenen Nachrichten, jeweils mit den neuesten Nachrichten, E2EE-entschlüsselt, Absendernamen aufgelöst. Entwickelt für „fasse meine ungelesenen zusammen und schlage nächste Schritte vor." Schreibgeschützt – markiert nie etwas als gelesen. |
| Chats/Gruppen/Räume mit Ungelesen-Zählern und einer entschlüsselten Vorschau der letzten Nachricht. Neueste zuerst. |
| Eine Konversation, entschlüsselt. Blättern Sie mit einem |
| Jeder entschlüsselte Anhang (Bild/Video/Audio/Datei). Ehrlicher Fehler bei Nicht-Medien. |
| Freundeslisten-Suche nach Namens-Teilstring oder die vollständige Liste. Rohe LINE-Daten – keine Fuzzy-Bewertung, keine Affinitäts-Rangfolge. |
| Mitglieder einer persistenten Gruppe. Ad-hoc-Räume ohne Gruppenaufzeichnung schlagen ehrlich fehl, anstatt eine gefälschte leere Liste zurückzugeben. |
Einblick (die Situation lesen, nicht nur die Nachrichten)
Tool | Funktion |
| Ein kompaktes Kontextnetzwerk über Ihren lokalen Index – Struktur, über die der Agent nachdenkt, kein Nachrichten-Dump. Gibt |
Schreiben (diese senden wirklich – keine Entwürfe)
Tool | Funktion |
| Sendet jetzt eine E2EE-Textnachricht (paarweiser Schlüssel für 1:1, Gruppenschlüssel für Gruppen/Räume). Optionale |
| Verschlüsselt, lädt zu LINE OBS hoch und sendet jetzt ein E2EE-Bild. Funktioniert für 1:1, Gruppen und Räume. Ein Senden pro Aufruf. Ehrlicher Fehlschlag, wenn der Schlüssel nicht aufgelöst werden kann oder der Upload abgelehnt wird. |
| Sendet eine Lesebestätigung, die die andere Partei sehen kann. Nur explizit – Lesen von Nachrichten und Hintergrund-Erfassung markieren nie etwas als gelesen. |
Suche (lokal, konversationsübergreifend – LINE hat keine solche Grundoperation)
Tool | Funktion |
| Hybride Suche über alle indizierten Unterhaltungen. Sammelt beim ersten Gebrauch automatisch, diversifiziert die Ergebnisse über Chats hinweg und gibt ein kleines Kontextfenster um jeden Treffer zurück. Gibt |
| Explizite Massenindizierung in die lokale DB + Einbettung für die semantische Suche. Das einzige Tool, das Massenabrufe durchführen darf; läuft einmal pro Aufruf, niemals zeitgesteuert. |
Umfang & Datenschutz (alles funktioniert offline, keine LINE-Sitzung erforderlich)
Tool | Funktion |
| Sperrt eine Unterhaltung und löscht ihre bereits indizierten Daten. Nicht nur zukünftige Erfassung — eine Sperrliste, die alte Daten im Index beließe, wäre vorgetäuschter Datenschutz. |
| Erlaubt eine Unterhaltung wieder (stellt gelöschte Daten nicht wieder her). |
| Zeigt die Sperrliste / die vollständige Datenschutzrichtlinie (gelesen aus |
Sitzung
Tool | Funktion |
| Passwortloser Login als Zweitgerät. Siehe unten. |
Anmelden
Voraussetzung: Aktivieren Sie auf Ihrem Haupttelefon 設定 › 我的帳號 › 允許自其他裝置登入 (Einstellungen › Konto › Anmeldung auf anderen Geräten erlauben). Ohne diese Einstellung bietet LINE diesem Gerät niemals eine Anmeldeaufforderung an — dies ist der mit Abstand häufigste Grund, warum eine erste Anmeldung zu hängen scheint.
⚠️ Limit von einer Desktop-Sitzung: LINE erlaubt nur eine Desktop-Client-Sitzung gleichzeitig pro Konto. Da Yomi sich als Desktop-Zweitgerät (
DESKTOPMAC) verbindet, wird durch die Anmeldung bei Yomi Ihre offizielle LINE-Desktop-App abgemeldet (und die erneute Anmeldung bei LINE Desktop macht Yomis Sitzung ungültig). Sie können Yomi und den offiziellen LINE-Desktop-Client nicht gleichzeitig verwenden.
Sie müssen dem Agenten lediglich Ihre Telefonnummer im E.164-Format geben — er liefert die
Region selbst (z. B. TW für eine +886-Nummer), wenn er das Tool aufruft.
Yomi steuert den passwortlosen (Zweitgerät-) Ablauf von LINE. Wie die Anmeldung erscheint, hängt von Ihrem MCP-Client ab:
Clients mit der MCP-
elicitation-Fähigkeit —loginfragt Sie nach Ihrer Telefonnummer/Region, zeigt die PIN in einem Dialog an und blockiert bis zum Abschluss. Ein Aufruf, keine PIN, die durch das Modell geleitet wird. Ihre Telefonnummer gelangt nie ins Transkript.Clients ohne diese Fähigkeit (z. B. Claude Desktop heute) — zwei Aufrufe.
login(mit Ihrer Telefonnummer + Region) gibt die PIN in seinem Ergebnis zurück; geben Sie sie in LINE auf Ihrem Haupttelefon ein und genehmigen Sie das Gerät; rufen Sie dannlogin_completeauf, das blockiert, bis das Telefon bestätigt. Der Agent solltelogin_completesofort aufrufen — es übernimmt das Warten, sodass es für Sie nichts zurückzumelden gibt.Vom Terminal aus —
npx @rikaidev/yomi loginführt den gesamten Ablauf auf stdout aus, PIN und alles. Immer als Fallback verfügbar.
Die einzige Frist, die zählt, ist die von LINE: Sie haben etwa 3 Minuten ab dem Zeitpunkt, an dem die PIN angezeigt wird, um sie einzugeben und das Gerät zu genehmigen. Yomis eigener Client hört noch viele Minuten darüber hinaus zu, sodass ein langsames Telefon nie der Fehler ist — nur LINEs 3-minütige Code-Lebensdauer ist es.
Sobald Sie angemeldet sind, wird die Sitzung — einschließlich eines Anmelde-Zertifikats — gespeichert (siehe unten), und zukünftige Anmeldungen überspringen die PIN vollständig.
Es gibt auch eine experimentelle MCP Apps-Oberfläche (eine
ui://yomi/login-Karte) für Clients, die interaktive Ansichten rendern. Sie ist spezifikationskonform und rendert unter dem MCP Inspector, aber einige Hosts rufen die Ressource ab, ohne den Ansichts-Handshake abzuschließen, sodass sie nur zur Anzeige dient und nie auf dem kritischen Pfad liegt — die obigen Abläufe funktionieren immer, unabhängig davon.
Sitzungen und Anmeldedaten
Yomi besitzt seinen eigenen Login. Beim Start ruft es einmal resumeSession() auf, liest die
LINE-Sitzung aus dem macOS-Schlüsselbund (Dienst dev.rikai.yomi.credentials, Konto
line) und aktualisiert das Token bei Bedarf stillschweigend.
First-Party-Anmeldedaten. Der passwortlose Login speichert das Auth-Token, Refresh-Token, Zertifikat, die MID und das E2EE-Schlüsselpaar selbst — und liest sie dann zurück, um zu verifizieren, dass der Schreibvorgang tatsächlich angekommen ist. Ein Login, der nicht gespeichert werden kann, schlägt laut beim Login fehl, nicht stillschweigend beim nächsten Neustart.
Gemeinsame Sitzung. Die Sitzung wird im kanonischen
dev.rikai.yomi.credentials- Schlüsselbund-Eintrag (oder im lokalen Anmeldedatenspeicher) gespeichert, sodass Yomi MCP und Yomi Desktop exakt dieselbe LINE-Anmeldesitzung nahtlos teilen können.Plattformhinweis. Auf macOS befindet sich die Sitzung im Anmelde-Schlüsselbund. Auf Linux und Windows fällt Yomi derzeit auf eine lokale JSON-Datei zurück — funktional, aber weniger geschützt als ein OS-Geheimnisspeicher und weniger getestet als der macOS-Pfad. Native sichere Speicher-Backends (libsecret / DPAPI) sind geplant; behandeln Sie eine Nicht-macOS-Installation bis dahin entsprechend.
Jedes Tool außer login und den Offline-Umfang/Such-Tools gibt einen ehrlichen Fehler zurück,
wenn keine Sitzung vorhanden ist. Yomi ist ansonsten ein reiner Abfrageserver — es pollt nie,
füllt nie im Hintergrund nach; jeder Tool-Aufruf macht genau die LINE-Anfragen, die er
benötigt, und collect_messages ist der einzige Pfad, der über viele Chats hinweg gleichzeitig abruft.
Suche
LINE hat keine unterhaltungsübergreifende Suche; Yomi baut eine lokal auf. Der Index ist eine
gitignorierte SQLite-Datenbank (data/search-index.db) im Repository — nichts verlässt
Ihren Rechner.
Die Suche ist hybrid konzipiert. Sie führt immer FTS5-Keyword-Suche aus (bm25 über
bigramm-vorverarbeiteten Text, sodass CJK-Teilstrings ohne Wortgrenzen abgedeckt sind) und,
wenn Einbettungen vorhanden sind, semantische Suche, und fusioniert dann die beiden Ranglisten per
Reciprocal Rank Fusion. Reine semantische Suche lässt exakte Treffer, die in
nicht eingebetteten Nachrichten liegen, stillschweigend weg; reine Keyword-Suche verfehlt Paraphrasen; die Fusion beider
bringt einen exakten Begriff und eine Bedeutungstreffer zusammen. Das mode-Feld der Antwort
meldet immer, welche Methoden beigetragen haben.
Die semantische Rangfolge behält jede Nachricht als eigenen Vektor. Tests mit real indizierten LINE-Unterhaltungen ergaben, dass das Einbetten überlappender Unterhaltungsfenster die mittlere Nachricht verwässerte und die Abrufqualität verringerte. Kontext wird daher erst nach der Rangfolge hinzugefügt: Yomi begrenzt, dass ein Chat die obersten Ergebnisse überflutet, und erweitert jeden Gewinner um zwei Nachrichten auf jeder Seite, sodass der Agent den Austausch sieht, der dem Treffer Bedeutung verlieh, ohne die Einbettung selbst zu schwächen.
Die semantische Rangfolge verwendet Xenova/bge-small-zh-v1.5 (BAAI-Allzweck-Einbettung, klein,
chinesisch-primär, aber mehrsprachig) über transformers.js. Die Einbettungs-Inferenz läuft
vollständig prozessintern auf der CPU — Ihr Nachrichtentext wird niemals irgendwohin gesendet.
Der einzige Vorbehalt ist ein einmaliger Modell-Download: Beim ersten collect_messages oder
search_messages ruft transformers.js das Modell (~90 MB) von huggingface.co ab
und speichert es lokal zwischen; jeder weitere Lauf danach ist vollständig offline. Dieser erste Abruf ist
eine ausgehende HTTPS-Anfrage an HuggingFace für die Modellgewichte — sie überträgt Ihre IP und
welches Modell heruntergeladen wird, aber keinen Nachrichteninhalt und keine LINE-Daten. Wenn Sie
Yomi vollständig netzwerkisoliert benötigen, befüllen Sie den transformers.js-Cache (oder richten Sie ihn auf ein
lokales Modellverzeichnis aus) vor der ersten Suche, sodass niemals ein Netzwerkaufruf erfolgt.
Die Zweitgeräte-Realität (lesen, bevor Sie „Ich kann keine alten Nachrichten abrufen" glauben)
Yomi läuft als Zweitgerät auf Ihrem Konto. Das bestimmt, was es sehen kann:
Gruppenchats ohne Letter Sealing sind auf dem LINE-Server im Klartext — vollständiger Verlauf und Medien, ohne Einschränkung.
Gruppenchats mit Letter Sealing sind E2EE-verschlüsselt, und dort kommt es auf die Epoche an. Eine solche Gruppe ist mit einem gemeinsamen Gruppenschlüssel verschlüsselt, der rotiert (bei Mitgliedschaftsänderungen oder wenn ein Client einen neuen bereitstellt). LINE gibt einem Gerät nur den aktuellen Gruppenschlüssel — es gibt keine API, um einen ersetzten abzurufen. Ein Zweitgerät entschlüsselt also Nachrichten ab der Epoche, deren Schlüssel es besitzt; Nachrichten, die unter einer älteren Epoche — bevor Yomi den aktuellen Schlüssel erhalten hat — gesendet wurden, können unentschlüsselbar zurückkommen, selbst in einer Gruppe, deren früheren Verlauf es lesen kann. Das ist der per-Epoche-Gruppenschlüssel von Letter Sealing inhärent, kein Fehler hier. Es kann auch quer schneiden: Die Epoche, die Ihr Telefon besitzt, und die Epoche, die Yomi besitzt, müssen nicht dieselbe sein, sodass die beiden Geräte jeweils einen anderen Ausschnitt derselben Gruppe lesen können.
Die Installation von Yomi rotiert selbst nichts, also ist „bevor ich Yomi installiert habe" die falsche Grenze. Yomi löst nur einen vorhandenen Gruppenschlüssel auf; es registriert (erzeugt) nie einen, weil das Erzeugen das gemeinsame Geheimnis der Gruppe für jedes Mitglied rotiert und jede Nachricht, die unter dem vorherigen verschlüsselt ist, stranden lässt. Eine frische Installation übernimmt also den aktuellen Schlüssel und liest bis zur letzten Rotation zurück — die Monate vor der Installation liegen kann. Die Grenze ist die letzte Neuverschlüsselung, nicht Ihr Installationsdatum. Und sobald Yomi eine Epoche gesehen hat, behält es diesen Schlüssel, sodass eine Rotation nach der Installation es in die Lage versetzt, beide Seiten zu lesen. Wenn eine Gruppe bis heute durchgehend unentschlüsselbar zurückkommt, ist das nicht diese Einschränkung — bitte melden Sie es.
1:1-Medien verwenden den E2EE-Schlüsselbund auf Kontobene, den ein Zweitgerät vollständig besitzt (LINE synchronisiert ihn während der Kopplung) — Yomi kann 1:1-Bilder/Dateien entschlüsseln, die es sehen kann.
Das 1:1-Verlaufs-Backfill ist die eine echte Einschränkung. LINE übergibt einem Zweitgerät nicht den vergangenen 1:1-Nachrichtenverlauf, wie es das für Gruppen tut. Nachrichten, die empfangen werden, während Yomi verbunden ist, entschlüsseln normal; tiefes Scrollen in den 1:1-Verlauf, der vor der Kopplung liegt, kann leer zurückkommen. Das ist eine serverseitige Einschränkung von LINE, kein Fehler hier.
Wenn die Entschlüsselung tatsächlich fehlschlägt, gibt Yomi einen expliziten missing_decrypt_material-
Fehler zurück — niemals eine gefälschte Karte oder einen Platzhalter. Stille ist ehrlich; ein fabrizierter
Treffer ist es nicht.
Entwicklung
Für Mitwirkende, die am Yomi-Quellcode arbeiten (erfordert bun
oder Node.js 24+ — .nvmrc pinnt dieselbe 24, die CI installiert, sodass nvm use in diesem
Verzeichnis sie aufnimmt; beachten Sie, dass nvm engines nicht liest, weshalb die beiden
getrennt angegeben und durch einen Test abgesichert sind):
bun install # install dependencies (or npm install)
bun run.mjs # run the stdio MCP server
bun run.mjs login # run the login flow in a terminal
npm run build # tsc --noEmit — type-check only (Yomi ships & runs from src/)
npm test # bun testDer Build führt nur Typprüfung und Kompilierung durch; dieses Repository spricht nicht mit Live-LINE-
Servern als Teil seines eigenen Builds. Das Verbinden eines MCP-Clients und das Aufrufen von login ist
das, was tatsächlich eine Sitzung startet.
src/
line/ LINE protocol core: TCompact/Thrift codec, E2EE (Letter-Sealing,
group keys, media), Talk/Auth/Sync service clients, session state,
passwordless login flow.
auth/ Credential store (macOS Keychain, JSON-file fallback off-darwin).
search/ Local cross-conversation index (SQLite + FTS5) and the offline
embedding pipeline (transformers.js).
mcp/ The stdio server: tool schemas, handlers, the privacy-policy loader,
and the experimental MCP Apps login view (mcp/ui/).
util/ [TAG]-prefixed logger (stderr only — stdout is the MCP JSON-RPC stream).Alles, was Yomi für Menschen schreibt, geht an stderr; stdout ist für den
MCP-JSON-RPC-Stream reserviert. Ein versehentliches console.log beschädigt das Protokoll — fügen Sie keins auf
einem Pfad hinzu, den der Server erreichen kann.
Datenschutz
Standardmäßig indexiert Yomi alle deine Unterhaltungen in den lokalen, auf dem Gerät befindlichen Suchindex, damit ein Agent darin suchen kann – ein Alles-erfassen-Standard, pro Chat abwählbar. Es wird nie etwas hochgeladen; die einzigen Daten, die dein Gerät verlassen, sind das, was der Agent selbst in seinen Antworten preisgibt. (Der einzige Nicht-LINE-Netzwerkaufruf, den Yomi selbst tätigt, ist der einmalige Download des Embedding-Modells von HuggingFace bei der ersten Suche – Modellgewichte rein, keine Nachrichteninhalte raus; siehe Suche.) PRIVACY.md ist die maßgebliche Richtlinie, und Yomi zeigt dem Agenten bei der Verbindung denselben Text an (und über get_scope_policy), damit er den Standard vor jedem Massenlesen offenlegen kann.
Haftungsausschluss
Yomi ist ein unabhängiges, inoffizielles persönliches Projekt, das zum Lernen und für den Zugriff auf das eigene LINE-Konto entwickelt wurde. Es ist nicht mit der LINE Corporation verbunden, von ihr autorisiert oder unterstützt. „LINE" ist eine Marke des jeweiligen Inhabers.
Die Nutzung von Yomi kann gegen die Nutzungsbedingungen von LINE verstoßen, und der Betrieb eines zusätzlichen Clients auf einem Konto kann zu Rate-Limiting oder Sperrung dieses Kontos führen. Yomi ist für den Zugriff auf dein eigenes Konto und deine eigenen Daten gedacht. Du bist allein für die Nutzung verantwortlich. Die Software wird „wie besehen" ohne jegliche Gewährleistung bereitgestellt – siehe LICENSE.
Danksagungen
Yomis LINE-Protokollimplementierung wurde unter Bezugnahme auf drei Open-Source-Projekte geschrieben, deren Feldlayouts, E2EE-Chunk-Reihenfolge, Anforderungsformen und Thrift-Definitionen diese unabhängige Implementierung beeinflusst haben:
evex-dev/linejs (MIT) — Anforderungsformen und das Letter-Sealing-E2EE-Payload-Layout.
DeachSword/CHRLINE (BSD-3-Clause) — Protokoll-Feldlayouts und den passwortlosen Anmeldeablauf.
er1ce/LINE-Protocol (Apache-2.0) — Thrift-Enum-Definitionen (ContentType, MessageRelationType, ServiceCode).
Ihre Urheberrechtshinweise und vollständigen Lizenztexte sind in NOTICE wiedergegeben, wie es ihre Lizenzen verlangen.
Lizenz
MIT
Available Tools
41 toolsaccept_invitationA
Accepts a group/chat invitation for your LINE account — you join the chat. Use for a group you were invited to (its chatId appears with invited status). One accept per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE group/room MID whose invitation to accept, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds behavioral context such as 'you join the chat' and 'One accept per call,' implying it is a one-shot action. However, it does not disclose what happens if called multiple times, authentication requirements, or error conditions (e.g., already a member).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences with no fluff. The purpose is front-loaded, and every sentence contributes meaning. It efficiently conveys the action, context, and constraint (one accept per call).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema, no nested objects), the description covers the essential aspects: what it does, when to use it, and parameter sourcing. It lacks details on success/error responses but is adequate for an agent to infer behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter chatId. The description adds value by specifying that the chatId comes from list_conversations, which provides usage context beyond the schema's description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Accepts' and the resource 'group/chat invitation for your LINE account'. It specifies the action 'you join the chat' and distinguishes the tool by mentioning the chatId appears with invited status, differentiating it from sibling tools like invite_member or list_conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Use for a group you were invited to (its chatId appears with invited status).' This tells the agent when to use this tool. However, it does not explicitly state when not to use it or mention alternative tools, though siblings like leave_group and invite_member provide implicit contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_friendA
Adds a person to your LINE friends by their MID (e.g. from get_group_members or find_contact). One add per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mid | Yes | MID of the person to add as a friend, e.g. from get_group_members. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals a key behavioral trait: 'One add per call.' It also implies mutation (adding a friend). It does not discuss permissions or rate limits, but for a simple operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, each essential. No redundancy, directly conveys purpose and a key constraint. Front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema), the description covers all necessary aspects: what it does, how to use it, and a limitation. No gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already documented. The description adds value by providing usage context ('e.g. from get_group_members or find_contact') beyond the schema description, helping the agent understand valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Adds'), the resource ('a person to your LINE friends'), and the method ('by their MID'). It provides examples of where to obtain the MID, making the purpose unmistakable. It distinguishes itself from sibling tools like block_contact or find_contact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context on how to obtain the MID from other tools (get_group_members, find_contact), implying usage context. However, it does not explicitly state when not to use it or compare with alternatives like accept_invitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block_contactA
Blocks a contact for your LINE account — they can no longer message you. Reversible with unblock_contact. One block per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mid | Yes | MID of the contact to block. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description must carry behavioral info. States 'they can no longer message you' and 'one block per call', but omits details like idempotency or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loading purpose and key behavior with no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers purpose, one-time action, and reversibility for a simple tool. Lacks return value info, but not critical given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for 'mid'; description does not add extra semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Blocks' and resource 'contact'. Differentiates from sibling 'unblock_contact' by explicitly mentioning reversibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions reversibility via 'unblock_contact', implying when to use. Lacks explicit exclusions or alternatives like 'remove_friend'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_reactionA
Removes this account's reaction from a LINE message. Undoes a react_message. One cancellation per call.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | LINE message id whose reaction to remove, as returned by get_chat_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses scope (this account's reaction), undo behavior (undoes react_message), and limitation (one per call). No annotations provided, so description carries burden and does it well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with all essential info: action, scope, relation to sibling, usage constraint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, description is fully informative: purpose, behavior, parameter source, usage patterns, and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only parameter messageId has schema description, which is 100% covered. Description adds context 'as returned by get_chat_messages', improving usability beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Removes' and resource 'this account's reaction'. Distinguishes from sibling 'react_message' by stating 'Undoes a react_message'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly links to react_message as undo. Mentions 'One cancellation per call' implying usage constraint. No explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_messagesA
Bulk-fetch recent messages from LINE conversations into Yomi's local cross-conversation search index (LINE has no native cross-chat search). Fetches up to perChat per chat (default 100) for chatIds, or all conversations when omitted, and best-effort embeds them for semantic search — re-running also repairs any messages still missing a vector. A background capture loop keeps the index current on its own, so call this only to force a reconcile or backfill specific chats. Undecryptable messages are skipped, not fabricated.
| Name | Required | Description | Default |
|---|---|---|---|
| chatIds | No | LINE chat/group/room MIDs to collect from, as returned by list_conversations. Omit to collect from all conversations. | |
| perChat | No | Maximum recent messages to fetch per chat (default 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals that embeddings are done best-effort, re-running repairs missing vectors, and undecryptable messages are skipped (not fabricated). It also mentions the autonomous background loop, providing comprehensive behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, coherent paragraph that is concise yet informative. It front-loads the purpose and then adds details, but could benefit from slight structural improvements (e.g., bullet points) for even easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional parameters, no output schema), the description covers all necessary aspects: purpose, when to use, behavior (best-effort embedding, repair, error handling), and parameter defaults. It is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description restates the parameter roles and defaults but adds no new semantic information beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: bulk-fetching recent messages from LINE conversations into a cross-conversation search index. It uses specific verbs ('bulk-fetch') and resources ('recent messages'), and distinguishes itself from siblings by noting LINE's lack of native cross-chat search and the tool's role in indexing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that the tool should only be called to force a reconcile or backfill specific chats, as a background capture loop normally keeps the index current. This provides clear usage context, though it could explicitly reference sibling tools like get_chat_messages for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_groupA
Creates a new LINE group/room immediately with the given members (no message is sent). chatType 0 = group (invitees must accept before joining), 1 = room (members added directly); default 1. Provide name and mids (initial members, e.g. from find_contact). One create per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mids | Yes | MIDs of the initial members to add. | |
| name | Yes | Name for the new group. | |
| chatType | No | LINE chat type: 0 = group (invite-based), 1 = room (direct add). Default 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full burden. It discloses that no message is sent, chatType affects member addition (invite vs direct), and only one create per call. Does not mention errors, rate limits, or idempotency, but is transparent about core behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with four sentences that front-load the main purpose. No redundant information; each sentence adds unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations, but description covers key behavior. Lacks details on return value (e.g., created group ID), error handling, or prerequisites like login. Adequate for a simple tool but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description adds value by clarifying chatType meaning (group vs room) and noting that mids can come from find_contact, which aids parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool creates a LINE group/room immediately with given members and no message is sent. Distinguishes between chatType 0 and 1, differentiating from sibling tools like list_groups or leave_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when-to-use guidance: creating a group with initial members. Mentions that mids can come from find_contact and defaults chatType to 1. Does not explicitly state when not to use or give alternatives but implies the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exclude_chatsA
Add conversations to Yomi's privacy denylist. Excluded chats are (1) skipped by future collect_messages/search_messages auto-collect — never fetched or indexed — and (2) PURGED now: their already-indexed messages and embeddings are deleted from the local index in the same call. A real privacy action, not just a future filter. Local-index operation; works without a live LINE session.
| Name | Required | Description | Default |
|---|---|---|---|
| chatIds | Yes | LINE chat/group/room MIDs to exclude, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses both future filtering and immediate data purging, and notes it works locally without a live LINE session. No behavioral traits are hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each essential: purpose, effects, and operational context. Front-loaded and no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a mutation tool with no output schema, covering what the tool does and its side effects. Minor gap: no mention of return value, but acceptable given the action-oriented nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of parameter. The tool description adds meaning by explaining the consequences of passing chat IDs (skip and purge), going beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds conversations to a privacy denylist, with explicit effects (skipping future auto-collect and purging existing data). It distinguishes from siblings like include_chats and list_excluded_chats by describing the dual action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for privacy exclusion of chats, but does not explicitly mention when not to use or provide alternatives. However, the context 'a real privacy action' and sibling names suggest reversal with include_chats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_contactA
Find LINE friends whose display name contains name (case-insensitive substring). Returns each match's mid for send_message. Raw friend-list lookup — no ranking, no fuzzy scoring.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Substring to match against friends' display names, case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses substring matching, case-insensitivity, and return of mid, but omits details like no-match behavior or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose and provide key details with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with one parameter, the description covers return value (mid) and matching behavior, sufficient for the agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds case-insensitivity detail, enhancing understanding beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it finds LINE friends with display name containing the given substring (case-insensitive), specifying the output as mid for send_message and distinguishing from ranking/fuzzy scoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for exact substring matching with mention of no ranking or fuzzy scoring, but does not explicitly exclude alternatives like list_contacts for full listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_messagesA
Fetch messages from one LINE conversation. Text is E2EE-decrypted when keys are available; each message has fromName (resolved sender), a mediaType flag (image/video/audio/file) plus messageId for get_message_media, and mentions (LINE's raw contentMetadata.MENTION, or null — a literal "@name" in text is not itself a mention). Without before, returns the most recent count. With before (id/deliveredTime of the oldest message already seen), returns one older page — repeat to page further back.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Maximum number of messages to return (default 50). | |
| before | No | Cursor to fetch messages older than this point. Use the id and/or deliveredTime of the oldest message already seen. | |
| chatId | Yes | LINE chat/group/room MID, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided so description carries full burden. It discloses E2EE decryption, resolved sender name, mediaType flag, mentions handling, and paging behavior thoroughly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph, front-loaded with main action. Every sentence adds value, though could be slightly more structured (e.g., separate sections).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and tool complexity (paging, E2EE, mentions), description covers key behavioral aspects and return fields adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds meaningful context beyond schema, such as E2EE decryption, fromName, and mentions as raw contentMetadata.MENTION, enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch messages from one LINE conversation' with specific verb and resource. It distinguishes from sibling tools like get_message_media by mentioning messageId for that purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use `before` for paging and explains default behavior (most recent messages). Does not explicitly mention alternatives but provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_membersA
List the members of one LINE group (mid + displayName each). Resolves persistent groups (c...); ad-hoc rooms (r...) without a group record return an honest error, never a fabricated empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE group chat MID, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that ad-hoc rooms return an honest error, not a fabricated empty list. No annotations exist, so description provides useful behavioral context beyond the basic listing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains output format, handles edge case for ad-hoc rooms, and parameter is well-defined. No output schema exists, so description compensates fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter chatId with 100% schema coverage. Description adds no new information beyond schema, but schema is sufficient. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'List', resource 'members of one LINE group', and output format 'mid + displayName each'. Distinguishes itself from sibling tools like list_conversations and get_chat_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (persistent groups) and when not (ad-hoc rooms returning error). Lacks explicit mention of alternatives but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insightA
A compact "what needs my attention" context network over the local index — you make the final call, this assembles the evidence cheaply. Nodes: connectors (people across ≥2 of your chats, with structural bridges) and relationships (per-conversation engagement, reply rhythm, recency). open: conversations whose latest message is NOT yours, ranked by how overdue they are relative to your usual reply rhythm there, each with fromName (last speaker), a preview of the latest message, overdueRatio/typicality, and a lastMessageId pointer. It carries NO message threads and makes NO judgement about addressee, nicknames, or open-request vs closing-ack — those are language understanding you do by reading each preview (a group message may be addressed to someone else, who then owns it), fetching the full thread with get_chat_messages only for the few worth it. Reads across all conversations (denylist-excluded dropped). Empty only when the index is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | No | Optional focus: restrict `relationships` and `pending` to this chat (as returned by list_conversations). Omit to scan all conversations. | |
| sinceHours | No | Lookback window in hours, measured back from the newest captured message (not wall-clock). Default 504 (21 days). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it carries no message threads, makes no judgement about addressee, reads across all conversations, and returns empty only when index empty. Fully transparent given no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but efficient: every sentence provides value, front-loaded with purpose. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains output structure, parameters, edge cases (empty index, denylist). Complete without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions, but description adds context: chatId is optional, sinceHours default is 504. Adds practical meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it assembles a 'what needs my attention' context network, describing nodes and 'open' conversations. Distinguishes from siblings by noting it carries no message threads and leaves judgement to the user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use ('get compact evidence') and suggests following up with get_chat_messages for full threads. Implicitly excludes use for fetching threads, but no explicit alternatives or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_imageA
Download and decrypt one LINE image message. Legacy alias of get_message_media restricted to images; prefer get_message_media for video/audio/file.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID the message belongs to. Required to locate E2EE key material. | |
| preview | No | Fetch the smaller preview object instead of the full-resolution original. | |
| messageId | Yes | LINE message id, as returned by get_chat_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Mentions decryption and that it's restricted to images, but lacks details on error handling or side effects. With no annotations, the description could be more thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. Front-loaded with the primary action and includes essential usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers purpose, legacy status, and alternative tool. Minor gap: does not explicitly state return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions; the description does not add extra parameter information, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Download and decrypt one LINE image message' and distinguishes itself from sibling get_message_media by noting it's a legacy alias restricted to images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (for images) and when to prefer the alternative: 'prefer get_message_media for video/audio/file'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_mediaA
Download and decrypt one LINE media message of any downloadable type (image, video, audio, file). Returns image/audio MCP content, or an embedded resource blob (with filename when known) for video/file. Non-media messages (text, sticker refs, unsupported types) return an honest error naming the content type — never fabricated bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID the message belongs to. Required to locate E2EE key material. | |
| preview | No | Fetch the smaller preview object instead of the full-resolution original (images/video only). | |
| messageId | Yes | LINE message id, as returned by get_chat_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses decryption, return content types for each media, and honest error for non-media. Lacks mention of rate limits or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main action, no redundant words. Every sentence adds critical information about behavior and types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Handles all return types explicitly, including error case. No output schema, but description compensates fully. Covers edge cases and diverse media types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 parameters (100%), baseline 3. Description adds context: chatId for E2EE key material, messageId from get_chat_messages, preview for smaller objects. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool downloads/decrypts LINE media messages of any downloadable type, listing specific types (image, video, audio, file) and distinguishing from siblings by specifying error behavior for non-media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit 'when to use' guidance or alternatives, but description implies only use for media messages by stating non-media return an error. Missing comparison to siblings like send_message or get_chat_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scope_policyA
Return Yomi's data-capture privacy policy (the disclosure to show the user) plus the current list of excluded conversations. Call this to show the user, in concrete terms, what Yomi captures by default and how to exclude conversations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates a read operation returning data, but does not disclose authorization needs, rate limits, or any side effects. Adequate for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words; front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description could detail the structure of the returned policy or excluded conversations list. It mentions 'disclosure to show the user' but lacks specifics, leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema; baseline score of 4 applies since description adds no param info beyond schema, which is fine given zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies returning Yomi's data-capture privacy policy and the list of excluded conversations, distinguishing it from sibling tools like list_excluded_chats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the use case: 'Call this to show the user, in concrete terms, what Yomi captures by default and how to exclude conversations.' Does not mention when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_digestA
One-shot unread digest: every LINE conversation with unread messages, each with its most recent messages (default 10), E2EE-decrypted, with resolved sender names. Saves calling list_conversations then get_chat_messages per chat. Read-only: never marks anything read, never touches the search index; denylist-excluded conversations are omitted. Returns an empty list when nothing is unread — never fabricated.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of conversations to scan for unread (default 20). | |
| perChat | No | Maximum recent messages to include per unread conversation (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses all key behaviors: read-only nature, no side effects on read status or search index, inclusion/exclusion criteria (denylist), output behavior (empty list vs missing data). Since annotations are absent, description fully covers transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: one states purpose and output, second contrasts with alternatives, third clarifies behavioral constraints. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers behavior, side effects, and edge cases (empty result). Lacks explicit output structure details, but since no output schema exists, the description provides enough for an agent to understand the returned data conceptually. Could mention that messages include text, timestamps, etc., but the key elements are described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter descriptions in schema are already clear (limit for conversations to scan, perChat for messages per unread chat). Description reiterates default values but doesn't add new semantic details beyond confirming they are defaults. Schema coverage is 100%, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'get unread digest' with clear scope: all conversations with unread messages, including decrypted messages and resolved names. Distinguishes from sibling tools list_conversations + get_chat_messages by being one-shot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: instead of combining list_conversations and get_chat_messages. Also clarifies limitations: denylist-excluded conversations omitted, returns empty list when nothing unread.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
include_chatsA
Remove conversations from Yomi's denylist, re-allowing future capture. Does NOT restore data purged when the chat was excluded — capture resumes from empty history going forward. Local-index operation; works without a live LINE session.
| Name | Required | Description | Default |
|---|---|---|---|
| chatIds | Yes | LINE chat/group/room MIDs to re-include. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: it only re-allows future capture, does not restore purged data, and operates on a local index. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences, each adding value: first states purpose, second clarifies limitation, third gives operational context. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is complete. It covers purpose, limitations, and operational context, leaving no gaps for an agent to decide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (only parameter chatIds is described in the schema). The description does not add extra meaning beyond 'LINE chat/group/room MIDs to re-include.' Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove conversations from Yomi's denylist, re-allowing future capture.' It specifies the resource (conversations) and distinguishes from the sibling tool 'exclude_chats' by being the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it does NOT restore purged data, and it is a local-index operation. While it doesn't explicitly list when to use vs alternatives, the inverse relationship with exclude_chats is implied, and the limitations guide appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_memberA
Invites members into a LINE group immediately. Invitees must accept before joining. Provide mids (from find_contact or get_group_members). One call per invite batch.
| Name | Required | Description | Default |
|---|---|---|---|
| mids | Yes | MIDs of the people to invite. | |
| chatId | Yes | LINE group/room MID to invite into, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors (immediate invite, acceptance required, one batch per call) but lacks details on error handling, permissions, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description covers the main functionality and usage, though absence of output schema and annotations is compensated with adequate behavioral notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds value by explaining the source of mids and batch constraint, going beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (invites) and the resource (LINE group members), and distinguishes from sibling tools like kick_member and leave_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on sourcing mids from find_contact or get_group_members and notes batch limitations, but does not explicitly compare with other group tools or mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kick_memberA
Removes (kicks) members from a LINE group immediately — they lose access at once (re-adding needs a fresh invite); visible to every member. Provide mids (from get_group_members). One call per removal batch.
| Name | Required | Description | Default |
|---|---|---|---|
| mids | Yes | MIDs of the members to remove. | |
| chatId | Yes | LINE group/room MID to remove members from, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses immediate loss of access, visibility to all members, and need for fresh invite to re-add. This covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, front-loaded with the main action. Every sentence adds essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers prerequisites and behavior. It does not explain return values, but the tool is simple enough that this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds context by specifying that mids come from get_group_members and chatId from list_conversations, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'removes (kicks)' and resource 'members from a LINE group', clearly distinguishing it from sibling tools like invite_member and leave_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to provide mids from get_group_members and that one call handles one batch. While not mentioning when not to use, the sibling context and prerequisites are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_groupA
Makes THIS LINE account leave a group immediately — it loses access to the group and its history. One leave per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE group/room MID to leave, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses key behaviors: immediate action, loss of history access, and 'one leave per call' constraint. This is sufficient for a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The first sentence states action and effect, the second adds a constraint. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and simple structure, the description adequately covers the tool's purpose, effect, and parameter. Could mention if the group must exist, but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for chatId. The description adds no additional semantic value to the parameter beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'leave', the resource 'group', and the effect 'loses access to its history'. It distinguishes itself from siblings like kick_member (which removes others) and rename_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to make the account leave a group) but does not explicitly contrast with alternatives like kick_member or provide conditions for when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsA
List the authenticated user's full LINE friend list as-is (mid + displayName). No ranking, no interaction-frequency ordering.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the output fields and lack of ordering, but omits any side effects, authentication requirements, rate limits, or pagination behavior. As a read operation, it is likely safe, but this is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the essential purpose and constraints without unnecessary words. It is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no output schema), the description is largely sufficient. It names the output fields and clarifies the lack of ordering. However, it could benefit from details about output format, authentication, or pagination limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema description coverage is 100%. The description adds no parameter information because none exist, which is appropriate. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'LINE friend list', and specifies the data returned (mid + displayName). It also clarifies what it does not include (ranking, interaction-frequency ordering), distinguishing it from potential similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving the raw, unfiltered friend list, but it does not explicitly state when to use it versus alternatives like find_contact or get_insight. No when-not-to-use or excluded cases are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsA
List LINE conversations (chats, groups, rooms) with unread counts, a preview of the last message, and a human-readable name (group title, or the other party's display name for a 1:1).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of conversations to return (default 20). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden. It discloses the output structure, which is helpful, but does not mention side effects, rate limits, authentication, or ordering behavior. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and efficiently conveys the tool's purpose and output. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter, the description covers the core functionality and output fields. Minor gaps like sorting order or pagination details are missing but not critical given the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter 'limit', and the description does not add any additional meaning beyond what the schema already provides. Baseline score of 3 applies as the description adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list', the resource 'LINE conversations', and explicitly mentions the returned fields (unread counts, last message preview, human-readable name). It is specific and distinguishes from sibling tools like list_contacts or list_stickers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_contacts or get_chat_messages. It does not mention any prerequisites, restrictions, or context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_excluded_chatsA
List the conversations currently on Yomi's privacy denylist. Returns [{ chatId, name }]; name is best-effort resolved when a live LINE session exists, otherwise null — never a fabricated placeholder. Local-index operation; works without a live LINE session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return format, name resolution behavior (best-effort, null without session, never fabricated), and offline capability. No annotations provided, so description compensates fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-loading purpose then details. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains return value and offline behavior. With no output schema, description provides necessary coverage. Could mention empty array case, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (0 param schema). Schema coverage is 100%. Baseline 4 applies as description need not add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'list the conversations on Yomi's privacy denylist' with specific verb and resource. Differentiates from sibling tools like list_conversations (all chats) and exclude_chats (adding to list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies it is a local-index operation working without a live LINE session, indicating when to use. No explicit alternatives but context from sibling tools provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stickersA
List the sticker packages this LINE account OWNS — the only stickers it can send. Returns each package's packageId (STKPKGID), title, and version (STKVER). Get individual sticker ids via search_stickers, then send_sticker. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Locale for package titles, e.g. 'en' or 'zh-Hant'. Defaults to 'en'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description explicitly states 'Read-only', which is a key behavioral trait. It also describes the return fields (packageId, title, version). However, it omits details like auth requirements or pagination, which are less critical for a simple list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three front-loaded sentences: purpose, return fields, and usage guidance. No unnecessary words or repetitions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description partially compensates by listing return fields. It covers the core functionality and usage context, though it could explicitly state the result format (e.g., array of objects).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the language parameter already described well in the schema. The description does not add additional semantic meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List the sticker packages this LINE account OWNS' with a specific verb (list) and resource (sticker packages), and distinguishes from siblings by noting it only lists owned packages that can be sent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs to use search_stickers for individual sticker ids and then send_sticker for sending, providing clear workflow guidance and distinguishing when to use this tool vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginA
Log in to LINE via the passwordless secondary-device flow. Requires 設定 > 我的帳號 > 允許自其他裝置登入 enabled on the primary phone — with it off LINE never prompts that phone and NO login can succeed, so raise this with the human up front rather than after a failure. On MCP clients with form elicitation, this call first confirms that setting, then prompts for phone/region and PIN and completes login by itself; if the human says the setting is off, it returns the enabling steps without starting a login (relay them verbatim, then call login again). On clients without it (e.g. Claude Desktop), phone/region come from the arguments or a persisted login, and this returns as soon as LINE issues the PIN (or reports none needed) — then call login_complete IMMEDIATELY (do not wait for the human). LINE gives ~3 minutes from PIN display to confirm on the phone; login_complete blocks past that, so calling it late only wastes that window.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | No | Phone number in E.164 form, e.g. +8869XXXXXXXX. Omit to be prompted (elicitation) or to reuse a persisted number. | |
| region | No | Region code, e.g. TW, JP, TH, ID, US. Omit to be prompted (elicitation) or to reuse a persisted region. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Thoroughly explains flow: setting check, prompt sequence, client differences, PIN timeline, and blocking behavior of login_complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is long but every sentence adds necessary context. Front-loaded with purpose, then layered details. Could be slightly tighter but complexity justifies length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, client differences, parameter interactions, timing constraints, and error handling. No output schema but describes return behavior adequately. Complete for a complex login flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described). Description adds value by specifying E.164 format, region code examples, and clarifying that omitting parameters triggers prompting or reuse of persisted values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Log in to LINE via the passwordless secondary-device flow.' Specifies verb and resource, and distinguishes from sibling tool 'login_complete' by describing their interaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use, prerequisites (setting on primary phone), handling of failure (setting off), client-specific behavior, and immediate follow-up requirement for login_complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_completeA
Finish a passwordless login that login started on a client without form elicitation (not needed on form-elicitation-capable clients). No arguments. Call immediately after login returns — do not wait for the human. Blocks while they enter the PIN (skipped if a stored certificate is valid) and approve the device, then returns the profile. LINE's real deadline is ~3 minutes from PIN display. Errors if no login is pending.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: blocks while user enters PIN, skips if stored certificate valid, requires device approval, returns profile, and errors if no pending login. With no annotations, description fully covers the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with front-loaded purpose, every sentence adds value (timing, blocking behavior, deadline, errors). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers most essential aspects (flow, timing, errors) but lacks details about the returned profile structure. Without output schema, a bit more on what the profile contains would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; description states 'No arguments.' Schema coverage is 100%, so no additional meaning needed. Baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool finishes a passwordless login initiated by 'login', specifies when it is needed (not on form-elicitation-capable clients), and distinguishes it from the sibling 'login' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call immediately after 'login' returns without waiting, mentions the 3-minute deadline, and warns of errors if no login is pending. Provides clear when-to-use vs. when-not (form-elicitation-capable clients).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_readA
Send a LINE read receipt (mark a conversation read up to messageId, or the latest when omitted) — a real action the other party can see. Use ONLY when the user explicitly wants to mark a chat read; reading (get_chat_messages, get_unread_digest) and background capture never mark read. Fails honestly if there is nothing to mark.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to mark read, as returned by list_conversations. | |
| messageId | No | Optional message id to mark read up to. Omit to mark read up to the latest message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses real action visible to other party and honest failure. No annotations provided, so description carries full burden; covers key traits but could mention side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple tool with no output schema; covers input semantics and behavioral impact. Slight gap on return value but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds explanation of messageId omission behavior, but does not significantly enhance schema info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool sends a LINE read receipt, marks a conversation read up to a message ID, and distinguishes from reading tools like get_chat_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use ONLY when the user explicitly wants to mark a chat read' and names alternatives that do not mark read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_stickerA
Show sticker preview images (MCP image content from the public sticker CDN) so you and the user can SEE them before sending. Give a packageId (from list_stickers/search_stickers) to preview its first stickers, or add a stickerId to preview just one. Each image is labeled with its stickerId + packageId for send_sticker. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max stickers to preview when no stickerId is given (default 8). | |
| packageId | Yes | Sticker package id (STKPKGID) to preview. | |
| stickerId | No | Optional specific sticker id (STKID) to preview just that sticker. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declares read-only nature and mentions it returns MCP image content from the public CDN. Without annotations, this covers basic safety but misses details like auth or rate limits. Adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste: purpose, usage guidance, and labeling info. Front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for the tool's simplicity: explains what it does, how to use parameters, and what output looks like (images labeled). No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining the relationship between packageId and stickerId, and mentions default limit. Goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it shows sticker preview images using MCP image content from the public sticker CDN, distinguishing it from siblings like send_sticker (sends) and list_stickers (lists metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: give a packageId from list_stickers/search_stickers to preview stickers, or add a stickerId for a single sticker. Mentions labeling for send_sticker. Lacks explicit when-not or alternatives, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
react_messageA
Adds a reaction to a LINE message, visible to the conversation. reactionType: 2 = 👍 LIKE, 3 = ❤️ LOVE, 4 = 😆 LAUGH, 5 = 😮 SURPRISE, 6 = 😢 SAD, 7 = 😡 ANGRY (default 2). One reaction per call.
| Name | Required | Description | Default |
|---|---|---|---|
| messageId | Yes | LINE message id to react to, as returned by get_chat_messages. | |
| reactionType | No | Predefined reaction: 2=👍LIKE, 3=❤️LOVE, 4=😆LAUGH, 5=😮SURPRISE, 6=😢SAD, 7=😡ANGRY. Default 2. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Lists reactionType values and default, and mentions visibility. However, does not disclose side effects, permissions, or rate limits. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first for purpose, second for parameter enum. Front-loaded and no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool (2 params, no output schema). Description covers basic purpose and parameters but lacks usage context, return value (fire-and-forget?), or edge cases. Adequate for minimal viability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds value for messageId by noting it is 'as returned by get_chat_messages', providing context beyond the schema. However, reactionType info largely duplicates schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action: 'Adds a reaction to a LINE message, visible to the conversation.' Specific verb (adds) and resource (reaction to LINE message). Distinguishes from sibling 'cancel_reaction' (which removes reactions) and other messaging tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., cancel_reaction, unsend_message). Only mentions 'One reaction per call' but does not clarify use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_groupA
Renames a LINE group/chat immediately; the new name is visible to every member. Works on groups/rooms (chatId starting with c/r). One rename per call.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New group name. | |
| chatId | Yes | LINE group/room MID to rename, as returned by list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavioral traits. It notes that the rename is 'immediate' and 'visible to every member', and restricts to chatId starting with c or r. It does not mention permissions, reversibility, or error cases, but provides adequate basic behavior for a simple mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that cover purpose, effect, scope, and usage constraint. No redundant information, perfectly front-loaded with the core action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 required params, no output schema), the description reasonably explains the effect and constraints. It could mention the response type or error handling, but it is sufficient for an agent to understand the tool's behavior. No output schema exists, but the description covers the essential outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds extra value by specifying that chatId must start with 'c' or 'r', which is not in the schema. This helps the agent correctly format the chatId parameter beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (renames) and the resource (LINE group/chat). It specifies that the new name is visible to all members, and distinguishes the tool by noting it works on groups/rooms with a specific chatId prefix, setting it apart from siblings like create_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: renaming a group/chat with a specific chatId prefix. It mentions 'one rename per call' to guide usage, but does not explicitly state exclusions or alternatives, which is acceptable as no sibling directly competes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesA
Search across your LINE messages. Hybrid ranking: FTS5 keyword search (covers every indexed message, so exact matches are never dropped) fused with semantic similarity when embeddings are available — the mode field reports which contributed (hybrid | semantic | keyword). If the index is empty and a session is live, it auto-collects all conversations first; a populated index searches locally with no network. Empty index with no session returns an honest notice, never a fabricated match list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 20). | |
| query | Yes | Search query. Plain keywords and natural-language descriptions both work — keyword matching catches exact terms, semantic matching catches paraphrases. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: auto-collection on empty index with live session, hybrid ranking, mode reporting, and honest failure on empty index without session. This is thorough and transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but each sentence adds valuable information. It is front-loaded with the core purpose and then details the behavior, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of hybrid search and auto-collection, the description covers the key behaviors well. While there is no output schema, it mentions the mode field, providing enough context for an agent to understand the return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds meaningful nuance to the query parameter, specifying that plain keywords and natural-language descriptions both work. This goes beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches across LINE messages with a hybrid ranking approach, and distinguishes itself from sibling tools like list_conversations and get_chat_messages by focusing on search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when the tool auto-collects versus searches locally, and mentions the behavior when the index is empty. However, it does not explicitly state when not to use this tool in favor of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stickersA
Search the account's OWNED sticker packages by title and expand each match into its individual sticker ids (STKID), ready for send_sticker. Case-insensitive substring match on the package title. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matching packages to expand with sticker ids (default 8). | |
| query | Yes | Substring to match against owned package titles (case-insensitive). | |
| language | No | Locale for package titles to match against, e.g. 'en' or 'zh-Hant'. Defaults to 'en'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explicitly states 'Read-only' and explains the expansion behavior. However, it does not detail output structure or edge cases like no matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with three brief statements covering purpose, matching behavior, and read-only nature. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description covers the main purpose and behavior well. It hints at the output (sticker IDs) but does not specify the exact structure, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing full parameter descriptions. The tool description adds no new information beyond the schema; it repeats the query substring match and limit defaults, so no added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches owned sticker packages by title and expands results into sticker IDs, ready for send_sticker. It specifies case-insensitive substring match, distinguishing it from list_stickers which likely lists all packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the output is ready for send_sticker, implying a use case. It does not explicitly mention when not to use or alternatives, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_audioA
Sends an E2EE audio message to a LINE conversation immediately (same pipeline as send_file). Provide exactly one of filePath or audioBase64; optional durationMs sets the recipient player length. Works for 1:1/group/room. One send per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| fileName | No | Optional original filename (used for the upload name; defaults to the basename of filePath or audio.m4a). | |
| filePath | No | Local filesystem path to the audio file. Mutually exclusive with audioBase64. | |
| durationMs | No | Optional audio duration in milliseconds, for the recipient player progress bar. | |
| audioBase64 | No | Base64-encoded audio bytes. Mutually exclusive with filePath. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states it sends an E2EE audio message immediately, but does not mention any required permissions, rate limits, or what happens on failure. The behavioral transparency is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and contains no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a send tool with no output schema and 5 parameters, the description covers the key aspects: what it does, how to use params, and applicable conversation types. It could mention return value or error handling, but overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by clarifying mutual exclusivity between filePath and audioBase64, and explains that durationMs sets the recipient player length. This goes beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('sends'), the resource ('E2EE audio message'), and the target ('LINE conversation'). It also notes it uses the same pipeline as send_file, which helps distinguish it from other send tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Provide exactly one of filePath or audioBase64' and mentions optional durationMs. It specifies applicability to 1:1/group/room and that one send per call is allowed. However, it does not explicitly indicate when to use this tool versus alternatives like send_message or send_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_contactA
Shares a LINE contact card to a conversation immediately — the recipient sees a tappable card for contactMid (e.g. from find_contact or get_group_members). displayName is optional (resolved from the mid when omitted). Works for 1:1/group/room. One send per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| contactMid | Yes | MID of the person whose contact card to share, as returned by find_contact or get_group_members. | |
| displayName | No | Optional display name for the card. Resolved from contactMid when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the send is immediate, one per call, and displayName is optional (resolved from contactMid when omitted). It could mention permissions or error handling, but the key behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and contains no unnecessary words. Every sentence adds meaningful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters (2 required) and no output schema, the description explains what the tool does, how to use it, and key constraints. It does not mention the response or success/failure signals, but for a side-effect tool, the information is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining chatId as a LINE chat/group/room MID, contactMid as coming from find_contact or get_group_members, and displayName's optional behavior. This enriches the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool shares a LINE contact card to a conversation, specifying the action and resource. It distinguishes from sibling send tools like send_message or send_image by focusing on contact cards and referencing find_contact/get_group_members for the MID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for sharing contact cards and works in 1:1/group/room. It does not explicitly state when not to use it or mention alternatives, but the context from sibling tools makes the intended use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_fileA
Sends an E2EE file attachment (any type — .docx, .pdf, .zip, …) to a LINE conversation immediately (same pipeline as send_image; the original filename is sealed end-to-end). Works for 1:1/group/room; fails honestly if the key cannot be resolved or the upload is rejected. One send per call. Provide exactly one of filePath or fileBase64; fileName is required with fileBase64 (and overrides the basename when given with filePath).
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| fileName | No | Original filename shown to the recipient (sealed E2EE). Required with fileBase64; optional with filePath (defaults to its basename). | |
| filePath | No | Local filesystem path to the file. Mutually exclusive with fileBase64. | |
| fileBase64 | No | Base64-encoded file bytes. Mutually exclusive with filePath; requires fileName. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: E2EE, filename sealed, same pipeline as send_image, honest failure, one send per call, and mutual exclusivity of filePath/fileBase64. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence covers core action and scope; second sentence adds edge cases and constraints. Efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately sets expectations (send succeeds or fails honestly). It covers the key aspects needed for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value: clarifies mutual exclusivity of filePath/fileBase64, fileName requirement with fileBase64, and default behavior with filePath. This exceeds the schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it sends an E2EE file attachment to a LINE conversation, specifies supported file types, and distinguishes by noting it uses the same pipeline as send_image. This provides a specific verb+resource and differentiates from siblings like send_message and send_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains when to use (sending files) and mentions failure conditions (key resolution/upload rejection). It doesn't explicitly state when not to use or list alternatives, but the guidance is sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_imageA
Sends an E2EE image to a LINE conversation immediately (encrypt → upload to OBS → send). Works for 1:1/group/room; fails honestly if the key cannot be resolved or the upload is rejected. One send per call. Provide exactly one of imagePath or imageBase64.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| imagePath | No | Local filesystem path to the image file. Mutually exclusive with imageBase64. | |
| imageBase64 | No | Base64-encoded image bytes. Mutually exclusive with imagePath. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: the E2EE encryption process, the upload to OBS, failure conditions ('fails honestly'), and the limitation of one send per call. This exceeds the minimum required for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) with front-loaded action and no extraneous details. Every sentence adds value: purpose, constraints, and parameter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool sends an image and has no output schema, the description covers essential aspects: encryption, upload, target types, failure cases, and input constraints. It lacks details on return values (e.g., success indicator) but is sufficient for most agents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with descriptive parameter descriptions. The description adds value by explicitly stating 'Provide exactly one of imagePath or imageBase64', reinforcing the mutual exclusivity constraint. This is helpful but not critical given the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'sends' and the resource 'E2EE image' with a detailed workflow (encrypt → upload → send). It specifies the target conversation types (1:1/group/room) and distinguishes from other send tools by focusing on images with E2EE.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: for immediate sending of a single encrypted image. It mentions failure conditions (key resolution, upload rejection) and the constraint 'one send per call'. However, it does not explicitly mention when not to use it (e.g., for multiple images) or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_locationA
Sends a location (map pin) to a LINE conversation immediately — latitude/longitude plus optional title (place name) and address. Works for 1:1/group/room. One send per call.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional place name shown on the pin. | |
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| address | No | Optional address shown under the pin. | |
| latitude | Yes | Latitude in decimal degrees. | |
| longitude | Yes | Longitude in decimal degrees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions 'immediately' and 'One send per call,' but does not disclose rate limits, permissions, or side effects. Some useful context, but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no wasted words. The first sentence covers the action and parameters, the second covers scope and limit. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and no output schema, the description covers the essential action and constraints. However, it does not mention what is returned (e.g., success indication or message ID), leaving a potential gap for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%. The description adds 'place name' for title and 'address shown under the pin,' which clarifies semantics beyond the schema. Baseline of 3 is exceeded by this additional nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it sends a location (map pin) with latitude/longitude and optional title/address, and specifies it works for 1:1/group/room. This differentiates it from sibling tools like send_message or send_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates immediate sending and limits to one send per call, which provides context. However, it does not explicitly compare to alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
Sends a text message to a LINE conversation immediately (not a draft). Always E2EE (pairwise for 1:1, group key for group/room); fails honestly rather than sending plaintext if the key cannot be resolved. One send per call. To @mention someone, put the visible "@name " into text AND pass a matching mentions entry — without mentions, "@name" is plain text and notifies no one. Resolve MIDs via get_group_members or find_contact first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Plain-text message body, including the literal "@name" text for any mentions — mentions only mark up text that is already there. | |
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| mentions | No | Optional @mentions. Each entry marks a span of `text` as a mention of one user, which LINE highlights and notifies. Omit to send `text` as plain, non-notifying text. | |
| replyToMessageId | No | Optional message id (from get_chat_messages) this replies to — LINE renders a quoted reply. Omit for a normal message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses critical behaviors: immediate sending (not a draft), E2EE handling ('fails honestly rather than sending plaintext'), per-call limitation ('One send per call'), and mention mechanics. This level of detail is essential for an AI agent to understand the tool's side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with useful information, but every sentence serves a purpose—no fluff. It is slightly long but front-loaded with the core action and then details. Structured logically: main action, then E2EE, then mentions, then dependencies. Could be trimmed slightly but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and the set of sibling tools (31 tools including send_image, send_file, etc.), this description fully equips the agent. It addresses all relevant concerns: immediate sending, mentions prerequisites, E2EE safety, and how to obtain needed MIDs. No output schema is needed for this action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning: it explains the relationship between the text parameter and mentions entries, specifies UTF-16 code units for offsets, and clarifies that replyToMessageId makes a quoted reply. It also instructs how to obtain MIDs for mentions, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Sends a text message to a LINE conversation immediately (not a draft)', uses a specific verb ('sends'), identifies the resource ('LINE conversation'), and distinguishes from related tools like send_image or send_file by focusing on text messages. It also clarifies behavioral nuances like E2EE and mentions, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use: for immediate text messages. It explains prerequisites for mentions ('resolve MIDs via get_group_members or find_contact first') and correct usage ('put the visible "@name " into text AND pass a matching mentions entry'). It does not explicitly state when to avoid this tool, but the context of sending text versus other media is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_stickerA
Sends a LINE sticker to a conversation immediately, named by stickerId (STKID) + packageId (STKPKGID). Only OWNED stickers can be sent — get ids from search_stickers/list_stickers. Works for 1:1/group/room. One send per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| version | No | Sticker version (STKVER). Defaults to "1". | |
| packageId | Yes | LINE sticker package id (STKPKGID). | |
| stickerId | Yes | LINE sticker id (STKID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states immediate sending and per-call limitation. It could mention if a response is returned, but overall sufficiently transparent for a simple send operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no redundant words. The core action is front-loaded, and each sentence provides necessary information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no output schema, and no nesting, the description covers all essential aspects: input requirements, usage restrictions, and conversation types. It is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by explaining the naming convention (STKID, STKPKGID) and version default, but the schema descriptions are already adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a LINE sticker to a conversation, specifying the exact identifiers (stickerId and packageId). It distinguishes itself from sibling tools like send_message by focusing on stickers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions that only owned stickers can be sent and directs the agent to search_stickers/list_stickers for IDs. Also specifies scope (1:1/group/room) and limit (one send per call), providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_videoA
Sends an E2EE video to a LINE conversation immediately (same pipeline as send_file; uses LINE chunked video encryption so it plays and integrity-verifies on official clients). Provide exactly one of filePath or videoBase64; optional durationMs sets the scrubber length. Works for 1:1/group/room. One send per call.
| Name | Required | Description | Default |
|---|---|---|---|
| chatId | Yes | LINE chat/group/room MID to send to, as returned by list_conversations. | |
| fileName | No | Optional original filename (used for the upload name; defaults to the basename of filePath or video.mp4). | |
| filePath | No | Local filesystem path to the video file. Mutually exclusive with videoBase64. | |
| durationMs | No | Optional video duration in milliseconds, for the recipient player scrubber. | |
| videoBase64 | No | Base64-encoded video bytes. Mutually exclusive with filePath. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses encryption (E2EE, LINE chunked video encryption) and immediate delivery. No annotations provided, so description carries full burden. Missing rate limits or error behavior, but key traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first defines purpose and encryption, second parameter constraints, third target types and send limit. No redundancy, all information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all key aspects for a send tool with 5 parameters and no output schema. However, does not describe the return value or confirm success/failure signaling, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds value beyond schema by stating mutual exclusivity of filePath and videoBase64, explaining durationMs sets scrubber length, and noting fileName default behavior. Schema coverage is 100%, so baseline is 3; description elevates to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Sends an E2EE video to a LINE conversation immediately' with specific verb and resource. Could better differentiate from other media tools like send_audio or send_image, which are siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit constraints: 'Provide exactly one of filePath or videoBase64', 'Works for 1:1/group/room', 'One send per call'. However, no guidance on when to use this vs. send_file, send_audio, etc., leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unblock_contactA
Unblocks a previously blocked contact for your LINE account. Undoes block_contact. One unblock per call.
| Name | Required | Description | Default |
|---|---|---|---|
| mid | Yes | MID of the contact to unblock. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States 'One unblock per call' (a behavioral constraint). However, lacks disclosure of side effects, required permissions, or error handling (e.g., if contact is not blocked).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main action. No unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with one required param and no output schema. Description covers the function and its relationship to block_contact. Could mention what happens if mid is already unblocked, but not essential for a basic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description only repeats the schema's param description ('MID of the contact to unblock'). No additional semantic context beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Unblocks a previously blocked contact for your LINE account.' Specific verb (unblocks) and resource (contact). Explicitly pairs with block_contact sibling, distinguishing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Undoes block_contact.' This directly tells the agent when to use this tool (when you have a blocked contact to unblock) and identifies the related alternative (block_contact).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsend_messageA
Retracts (unsends) one of YOUR OWN LINE messages for everyone — deletes it from the conversation for all participants and CANNOT be undone. LINE allows unsending only your own messages. SAFETY GATE: you must pass confirm: true, or the call refuses so it can never fire by accident. One unsend per call.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to proceed. Retraction is irreversible; the call refuses unless this is explicitly true. | |
| messageId | Yes | LINE message id to retract (must be your own), as returned by get_chat_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully discloses irreversible action, deletion for all participants, requirement for own messages, safety gate (confirm: true), and one unsend per call. Thorough and accurate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, no superfluous words, well-structured with key information upfront.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: action, scope, safety, constraints. No output schema needed for a void action. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes both parameters with 100% coverage. Description adds value by specifying that messageId comes from get_chat_messages and explaining the confirm requirement's purpose (irreversibility safety).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies the action (retracts/unsends), the resource (your own LINE messages), and the effect (deletes for all participants). Distinguishes from sibling tools like send_message or react_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: only own messages, one unsend per call. Implicitly tells when to use (to undo a sent message). No explicit alternatives or when-not-to-use, but sibling tools don't have similar functionality, so it's acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
39 tool updates
v0.4.1- Added
accept_invitation - Added
add_friend - Added
cancel_reaction - Added
collect_messages - Added
create_group - Added
exclude_chats - Added
find_contact - Added
get_chat_messages - Added
get_group_members - Added
get_insight - Added
get_message_image - Added
get_message_media - Added
get_scope_policy - Added
get_unread_digest - Added
include_chats - Added
invite_member - Added
kick_member - Added
leave_group - Added
list_contacts - Added
list_conversations - Added
list_excluded_chats - Added
list_stickers - Added
login_complete - Added
mark_read - Added
preview_sticker - Added
react_message - Added
rename_group - Added
search_messages - Added
search_stickers - Added
send_audio - Added
send_contact - Added
send_file - Added
send_image - Added
send_location - Added
send_message - Added
send_sticker - Added
send_video - Added
unblock_contact - Added
unsend_message
38 tool updates
v0.3.0- Removed
accept_invitation - Removed
add_friend - Removed
cancel_reaction - Removed
collect_messages - Removed
create_group - Removed
exclude_chats - Removed
find_contact - Removed
get_chat_messages - Removed
get_group_members - Removed
get_message_image - Removed
get_message_media - Removed
get_scope_policy - Removed
get_unread_digest - Removed
include_chats - Removed
invite_member - Removed
kick_member - Removed
leave_group - Removed
list_contacts - Removed
list_conversations - Removed
list_excluded_chats - Removed
list_stickers - Removed
login_complete - Removed
mark_read - Removed
preview_sticker - Removed
react_message - Removed
rename_group - Removed
search_messages - Removed
search_stickers - Removed
send_audio - Removed
send_contact - Removed
send_file - Removed
send_image - Removed
send_location - Removed
send_message - Removed
send_sticker - Removed
send_video - Removed
unblock_contact - Removed
unsend_message
40 tool updates
v0.2.0- First observed
accept_invitation - First observed
add_friend - First observed
block_contact - First observed
cancel_reaction - First observed
collect_messages - First observed
create_group - First observed
exclude_chats - First observed
find_contact - First observed
get_chat_messages - First observed
get_group_members - First observed
get_message_image - First observed
get_message_media - First observed
get_scope_policy - First observed
get_unread_digest - First observed
include_chats - First observed
invite_member - First observed
kick_member - First observed
leave_group - First observed
list_contacts - First observed
list_conversations - First observed
list_excluded_chats - First observed
list_stickers - First observed
login - First observed
login_complete - First observed
mark_read - First observed
preview_sticker - First observed
react_message - First observed
rename_group - First observed
search_messages - First observed
search_stickers - First observed
send_audio - First observed
send_contact - First observed
send_file - First observed
send_image - First observed
send_location - First observed
send_message - First observed
send_sticker - First observed
send_video - First observed
unblock_contact - First observed
unsend_message
TDQS
Most tools have distinct purposes, but there is some overlap: get_message_image is a legacy alias of get_message_media, which could cause confusion. Also, collect_messages and search_messages are related but serve different roles (indexing vs querying). Overall, boundaries are clear.
Tool names predominantly follow verb_noun pattern (e.g., list_stickers, send_message), but there are minor deviations like login (not login_user) and get_insight (unconventional verb). Overall, consistent enough for an agent to predict patterns.
41 tools is a large surface area, but LINE is a feature-rich platform. Some tools could be consolidated (e.g., send_media variants into a single tool with a type parameter). The count feels slightly excessive for the domain.
The tool set covers all major LINE operations: messaging (text, image, video, audio, file, location, contact, sticker), group management (create, rename, invite, kick), contact management, reactions, unsend, search, privacy controls, and login flow. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
WhatsApp CRM for AI agents: search contacts, read chats, manage the sales pipeline, send messages.
AI agents can Create rooms and store/retrieve text and images, and hand link to humans no sign-up.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Disposable email inboxes for AI agents — read messages and verification codes.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to send messages, manage rich menus, and interact with users through LINE Official Accounts via the LINE Messaging API. Supports both individual messaging and broadcasting to all followers with text and customizable flex messages.18767Apache 2.0
- AlicenseAqualityDmaintenanceIntegrates the LINE Messaging API with AI agents via the Model Context Protocol, supporting both stdio and SSE transport protocols. It allows agents to send messages, manage rich menus, and retrieve user profile information for LINE Official Accounts.10767Apache 2.0
- AlicenseAqualityBmaintenanceOperate your LINE Official Account from any AI agent through natural language.378297MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI tools to read and send messages through LINE Desktop via MCP, supporting manual or automatic sending without official LINE API tokens.59111MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/RikaiDev/yomi'
If you have feedback or need assistance with the MCP directory API, please join our Discord server