Skip to main content
Glama
Johnhyeon

TelegramLens

by Johnhyeon

TelegramLens

텔레그램 채널의 종목 언급·내러티브 흐름을 구조화해 AI(Claude)에게 전달하는 로컬 MCP 서버.

AI는 이미 퍼져 있는 정보를 정리할 뿐, 아직 구조화되지 않은 내러티브 흐름은 못 잡는다. 텔레그램에서 도는 찌라시·모멘텀·테마를 구조화해 던져주면 그 갭을 메운다.

비공개·판매용 (Proprietary). 공개 배포하지 않는다.


구조

사용자 Telegram 계정 (Telethon 세션, 로컬)
    → 가입한 채널 메시지 수집
    → 종목 언급 추출 (KRX 2700+ 종목 사전 검증)
    → 로컬 SQLite (히스토리 보존 → 모멘텀 감지)
    → MCP 툴로 Claude에 구조화 요약 제공

데이터는 전부 사용자 PC(~/.telegramlens/)에만 저장된다. 서버로 보내지 않는다.


Related MCP server: Telegram MCP Server

설치 & 로그인

pip install -e .

# 1) Telegram API 자격증명 발급: https://my.telegram.org → API development tools
# 2) 로그인 (전화번호 인증 — 1회만)
telegramlens-login

로그인하면 세션 파일·DB·종목 사전(KRX)이 ~/.telegramlens/ 에 준비된다.

Claude 등록

telegramlens-setup           # Claude Desktop/Code 자동 등록

또는 수동으로 claude_desktop_config.json:

{ "mcpServers": { "telegramlens": { "command": "telegramlens" } } }

MCP가 Claude에 안 뜨거나 뭔가 막히면:

telegramlens-doctor           # 설치·설정 진단 (uv/패키지/명령/config/라이선스/로그인)

백그라운드 자동 수집 (별도 자식 데몬)

수동 telegram_sync 를 매번 부르지 않아도, Claude 가 이 MCP 서버를 켜둔 동안 수집 데몬이 10분 주기로 백그라운드 수집한다. 삭제되기 전 찌라시를 박제하고 momentum 히스토리를 쌓는 게 목적. 데몬이 DB를 미리 채워두므로 조회 도구는 즉시 응답한다(질문할 때 텔레그램 접속을 기다리지 않는다).

왜 '별도 자식 프로세스'인가. 두 함정을 동시에 피하려는 설계다:

  1. 백신(persistence) — 데몬을 창 없이 detach 하거나 부팅 자동시작(Run키/예약작업)을 걸면, 행위가 멀웨어의 persistence/defense-evasion 패턴과 같아 행위 엔진(예: AhnLab V3 Persistence/MDP.Event)에 잡힌다.

  2. stdio 오염·멈춤 — 반대로 수집을 MCP 서버 에서 돌리면, Telethon 로그가 stdout(= Claude 와의 JSON-RPC 채널)을 오염시키고 무거운 수집이 이벤트 루프를 막아 "응답 멈춤/용량" 에러가 난다.

그래서 데몬을 평범한 자식 프로세스로 띄운다 — detach·breakaway·자동시작 레지스트리가 전혀 없고(= persistence 아님), stdout/stderr 는 DEVNULL 로 막아(= stdio 오염 없음), 별도 프로세스라 서버 이벤트 루프를 막지 않는다(= 멈춤 없음). Claude(부모 MCP 서버)가 종료되면 함께 정리된다.

  • 동작: 서버 기동 시 데몬 자식 1개 spawn → 데몬이 즉시 1회(백필) 후 10분 주기. 데몬이 떠 있는 동안 telegram_sync 는 세션을 데몬에 양보하고 DB 신선도만 보고한다.

  • 공백 처리(정합성): Claude 를 닫으면 데몬도 종료. 다시 열면 데몬이 꺼져 있던 구간을 DB 최신 메시지 시각(watermark)부터 지금까지 자동 백필한다 — 시간 상한 최대 7일(--max-window), 채널당 상한은 창 길이에 비례해 자동 확대(정상 500 → 대형 캐치업 시 최대 5000)되어 바쁜 채널도 날짜 경계까지 빠짐없이 채운다(중복은 UNIQUE 제약으로 스킵). 긴 갭 백필은 첫 사이클이 수 분 걸릴 수 있고, 그동안 조회 도구는 "수집 중"을 안내한다.

  • 상태: telegram_statuscollector 필드. 로그: ~/.telegramlens/daemon.log.

  • DB는 WAL 모드 — 수집(write)이 도는 중에도 Claude 조회(read)가 막히지 않는다.

디버그·옵트인용으로 포그라운드 수동 실행도 가능: telegramlens-daemon (콘솔 창에서 직접 실행). 자동 기동 데몬과 PID 락을 공유해 중복 실행은 막힌다. 자동시작(부팅) 등록 기능은 없다.


MCP 툴

조회

용도

telegram_sync(minutes)

최근 메시지 수집·구조화 (먼저 실행)

telegram_trending(hours, top)

기간 내 언급량 상위 종목

telegram_momentum(hours, baseline_hours)

언급 급증 종목 — 새 내러티브 포착

telegram_stock_buzz(query, hours)

특정 종목 언급 요약 + 원문 샘플

telegram_messages(channel, hours)

원문 메시지 drill-down (채널·시간)

telegram_search(query, hours, channel)

원문 키워드 전문검색 — 종목 언급 없는 거시·산업·테마 글까지. 글에 붙은 링크의 제목·발췌까지 검색

telegram_link_content(url)

글에 붙은 링크 하나의 제목·설명·본문 발췌(수집기가 미리 읽어 둠, 없으면 그 자리에서 읽음)

telegram_channels()

수집된 채널 목록

telegram_status()

로그인·수집 상태

수집 대상은 가입된 모든 브로드캐스트 채널이다. 새로 가입한 채널은 다음 사이클부터 자동 포함된다(별도 등록 불필요).

채널 진단

용도

telegram_classify_channels(threshold)

채널별 종목 언급 밀도 리포트(어느 채널이 종목 위주인지 진단 — 수집을 제한하진 않음)

사전 관리 (오탐·별칭 루프)

용도

telegram_fp_candidates(days)

오탐 후보(일반명사 충돌 의심) 리뷰 리스트

telegram_alias_candidates(days)

누락 별칭 후보(이름(코드) 표기 기반, 고정밀)

telegram_block_name(code)

모호어 차단(이름단독 매칭 차단, 코드 동반 시만 인정)

telegram_add_alias(alias, code)

별칭 등록 (즉시 반영)


추출 품질 2층

역할

데이터

코드 검증

6자리 코드는 KRX 사전에 있는 것만 채택

KRX 2700+

별칭 (recall↑)

통용어/약어 → 코드 (현대차→005380)

data/aliases.json + 사용자 override

블록리스트 (precision↑)

일반명사 충돌 종목은 코드 동반 시만 (대상, TP)

data/ambiguous_codes.json + override

사용자 사전은 ~/.telegramlens/aliases.json, ~/.telegramlens/ambiguous_codes.json 로 확장(번들 위에 병합).


알려진 한계 (MVP)

  • 오탐 판별: telegram_fp_candidates 는 후보를 좁혀줄 뿐, "대형주를 약칭으로 부른 것"과 "일반명사 충돌"을 자동 구분하진 못한다. 최종 판단은 사람.

  • 별칭 재현율: 코드 없이 쓰인 별칭(현대차 단독)은 누군가 현대차(005380) 형태로 쓸 때 비로소 후보로 잡힌다. 볼륨 누적형.

  • 수집 트리거: 현재 telegram_sync 수동 호출. 백그라운드 주기 sync 는 추후.


종목 사전 갱신

telegramlens-refresh-stocks   # KRX 상장종목 최신화

Available Tools

23 tools
telegram_add_aliasA

별칭을 사전에 등록합니다(통용어/약어 → 6자리 코드). 즉시 반영됩니다.

Args: alias: 텔레그램에서 쓰이는 통용어/약어 (예: 현대차). code: 6자리 종목코드 (예: 005380).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
aliasYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds one behavioral fact ('즉시 반영됩니다' - takes effect immediately) and confirms mutation, which aligns with readOnlyHint=false. However, it does not disclose what happens on duplicate aliases, whether an existing alias is overwritten, or any other side effects, so it provides only minimal value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main statement is one efficient line, the immediate-effect note is a single short sentence, and the two parameters are listed in a clean format. No redundant words or restatements of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter registration tool, the description covers purpose, parameter meaning with examples, and an important behavioral note. Since an output schema exists, return-value details are not needed. The only missing piece is usage guidance relative to the many sibling tools, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by defining alias as a Telegram term/abbreviation and code as a 6-digit stock code, and by providing realistic examples (현대차, 005380). This is exactly the format and meaning information missing from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb '등록합니다' (register) and the resource (a dictionary mapping common terms/abbreviations to 6-digit codes), with concrete examples. It is unambiguous, but it does not explicitly differentiate this from related siblings such as telegram_alias_candidates or telegram_block_name, so it stops short of a top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of alternatives among the sibling tools. The intent is implied by the name and purpose, but the description leaves the choice between adding, blocking, or suggesting aliases entirely to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_alias_candidatesA
Read-onlyIdempotent

누락된 별칭 후보를 반환합니다.

텍스트에 이름(123456) 형태로 나오지만 현재 사전이 그 이름을 해당 코드로 매칭하지 못하는 토큰. 코드가 정답을 알려주므로 고정밀. 검토 후 telegram_add_alias 로 등록하세요.

Args: days: 분석 기간(일). 기본 7. min_count: 최소 등장 횟수. 기본 2. top: 상위 N개. 기본 40.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
daysNo
min_countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover readOnlyHint, idempotentHint, openWorldHint, and destructiveHint. The description adds behavioral context beyond those by explaining exactly what kind of tokens appear in the results and why they are considered high-precision ('코드가 정답을 알려주므로 고정밀'). This provides useful transparency beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence summary, a brief definition of the candidate pattern, a usage instruction, and a clean Args list. Every sentence earns its place and the main purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has an output schema so return-value details are covered, and the description includes all parameter meanings and defaults plus the intended next action. No critical operational context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage, so the description carries the full burden. It fully compensates by explaining each parameter in Korean with its meaning and default value: days (분석 기간, default 7), min_count (최소 등장 횟수, default 2), and top (상위 N개, default 40).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns missing alias candidates and defines the exact inclusion criterion (text matching `이름(123456)` that the current dictionary fails to map). This is a specific verb+resource with enough detail to distinguish it from sibling tools like telegram_add_alias, which it identifies as the follow-up registration tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it returns high-precision candidates for manual review and explicitly instructs the agent to register them via telegram_add_alias afterwards. It does not explicitly state when not to use this tool versus other sibling candidates tools like telegram_fp_candidates, but the usage chain is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_block_nameA

종목을 차단 목록에 추가합니다(확인 표기가 있을 때만 인정하도록).

국내 6자리 코드와 미국 티커를 모두 받습니다. 국내는 이름 단독 매칭을 막고 본문에 코드가 있을 때만 인정하며, 미국은 bare 매칭을 막고 cashtag($NVDA)로 쓸 때만 인정합니다.

dry_run=True 면 아무것도 바꾸지 않고, 최근 30일 집계에서 빠질 언급 수와 원문 표본을 보여줍니다. 실제 적용 시 같은 조건으로 제거하므로 두 건수는 일치합니다. 적용 후에는 telegram_trending / telegram_fp_candidates 를 다시 돌려 순위 변화와 오탐 회귀를 확인하세요.

Args: code: 6자리 종목코드(예: 001680) 또는 미국 티커(예: ASIC). note: 메모(예: '대상 = target/object 충돌'). dry_run: True 면 미리보기만(기본 False).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
noteNo
dry_runNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the sparse annotations, the description discloses that real application modifies the block list, dry_run makes no changes, and the dry-run removal count exactly matches actual removal. It also specifies the exact matching policy (Korean names require a code in the body; US names require a cashtag), which is important behavioral context. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose sentence, bold matching-policy block, dry-run workflow, and a compact Args section. Each sentence earns its place and the most important behavioral constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with an output schema available, the description covers input formats, matching conditions, dry-run semantics, count consistency, and post-run verification steps. Nothing an agent needs to call it correctly or confirm the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility for parameters, and it succeeds. code gets format and examples, note gets a concrete example, and dry_run gets its default and preview behavior. This adds meaning far beyond the bare schema properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action: '종목을 차단 목록에 추가합니다' – adding a stock to the block list – and clarifies scope with Korean 6-digit codes vs US tickers. The matching rules make the tool's purpose distinct from generic search or alias tools, so an agent can tell what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operating guidance: dry_run previews the count and samples, and after applying the block the agent should rerun telegram_trending / telegram_fp_candidates. However, it never explicitly contrasts this with siblings like telegram_add_alias or states when blocking should be chosen over alternatives, so the selection guidance is implied rather than direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_briefingA
Read-onlyIdempotent

'오늘 브리핑 / 장전 / (텔레그램) 시황 / 시장 브리핑' 등을 요청받으면 호출하세요.

시장 브리핑용 텔레그램 언급 데이터를 한 번에 모아 반환합니다:

  • trending_많이언급: 기간 내 '많이 언급된' 종목

  • momentum_급증: 평소 대비 '갑자기 급증한' 종목(새 내러티브)

반환값의 _playbook 지침대로 plain-text 메시지를 작성해 telegram_send_me 로 '한 번만' 보내세요. 내용 작성·전송 규칙은 _playbook 과 telegram_send_me docstring 을 따르세요.

Args: hours: 집계 시간 범위(시간). 장전이면 12 권장(간밤~아침). 기본 12.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description doesn't need to repeat that. It adds behavioral context by stating the tool returns aggregated data and instructs the agent to then send via telegram_send_me, and notes the 'only once' constraint. It also explains the hours parameter's meaning. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a bit long but well-organized: trigger phrases are front-loaded, then the return data categories, then the send instruction, and finally the parameter explanation. Bullet points aid readability. No redundant fluff, though it could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and an output schema (which presumably documents the return structure), the description provides sufficient context: what it returns, how to use the output (via _playbook), and the recommended hours value. It doesn't detail the output format, but that's covered by the schema and _playbook, so completeness is high.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, hours, is explained in detail: it's the aggregation time range, with a recommended value of 12 for pre-market (overnight~morning) and a default of 12. The schema only defines it as a number, so this description fully compensates for the 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: it aggregates Telegram mention data for market briefing, listing two specific data categories (trending and momentum). It also differentiates from sibling tools like telegram_trending and telegram_momentum by positioning itself as a combined briefing tool ('한 번에 모아'). The trigger phrases make the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists the request phrases that should trigger this tool (e.g., '오늘 브리핑', '장전', '시황'). It also gives post-call guidance: use the returned _playbook to compose a plain-text message and send it exactly once via telegram_send_me. This is unambiguous usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_buzz_scoreA
Read-onlyIdempotent

종목별 종합 버즈 스코어(독립언급×tier×확산×velocity). 감성·유형 필터 지원.

종목코드 매칭 전용 — 거시·지정학·테마(예: "미국 이란", "금리") 질문은 telegram_search 사용.

Args: window_hours: 집계 윈도우(시간). 기본 24. only_types: 포함할 메시지 유형(예: ["report"]). 생략 시 전체. exclude_gossip: only_types 미지정 시 gossip 제외. 기본 False. sentiment: positive/negative/neutral 중 하나만. 생략 시 전체. top: 상위 N개(세그먼트별). 기본 20. kind: 종목 종류 — "stock"(개별주만)/"etf"(ETF만)/"all"(전체). 기본 all. market: 시장 — "KR"(국내만)/"US"(미국만)/"all"(전체). 기본 all. kind 와 조합해 국내주식·미국주식·국내ETF·미국ETF 네 갈래로 나뉩니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
kindNo
marketNo
sort_byNo
sentimentNo
only_typesNo
window_hoursNo
exclude_gossipNo
min_independentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so no contradiction exists. The description adds valuable behavioral context: conditional gossip exclusion, segmentation by kind/market into four branches, per-segment top-N behavior, and default values for window_hours, top, kind, and market.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core formula, then states the critical usage boundary, then lists parameters in a scannable format. Every sentence contributes meaningful guidance; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 optional parameters, this description covers the main invocation path very well, including defaults, filter behavior, and segmentation logic. The output schema supplies return structure, and annotations cover safety. The only meaningful omission is the lack of any explanation for sort_by and min_independent, which prevents it from being fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the parameter documentation burden. It explains 7 of 9 parameters with defaults and allowed values, notably kind, market, sentiment, and exclude_gossip. However, sort_by and min_independent are entirely undocumented, leaving a real gap for an agent trying to use those advanced options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it computes a per-ticker composite buzz score based on an explicit formula ('독립언급×tier×확산×velocity'). It also scopes the tool firmly to ticker matching, which separates it from generic search and other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when NOT to use it: macro/geopolitical/theme queries such as '미국 이란' or '금리' should go to telegram_search. This gives a clear alternative and usage boundary, which is exactly the kind of guidance agents need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_channelsA
Read-onlyIdempotent

수집된 채널 목록과 채널별 누적 메시지 수·tier(분류)·weight 를 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds useful context about what data is returned, though it does not mention pagination, ordering, or whether the list is exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the resource and the returned attributes without extraneous detail. It is front-loaded with the main action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, rich safety annotations, and an output schema provided, the description is complete for the agent to select and invoke this tool. There is no missing operational information needed for a parameterless read-only list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description cannot add parameter-level meaning. However, it does usefully enumerate the returned fields, which helps the agent understand the tool's output even though an output schema exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('returns'), a clear resource ('collected channel list'), and the key attributes included (cumulative message count, tier, weight). This clearly distinguishes it from siblings that classify or mutate channels, making the tool's purpose immediately identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to prefer this tool over siblings such as telegram_classify_channels or telegram_set_tier. The description implies a read-only channel overview use case, but it does not state exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_classify_channelsA

가입한 모든 채널을 스캔해 채널별 '종목 언급 밀도'를 측정·리포트합니다.

어느 채널이 종목 위주이고 어느 채널이 거시·잡담 위주인지 보여주는 진단 도구. 수집 대상을 제한하지는 않습니다(전 채널 자동 포함). 전 채널을 훑어 느리니 필요할 때만.

Args: sample: 채널당 샘플링 메시지 수. 기본 80. threshold: 주식채널 판정 밀도(0~1). 기본 0.05(5%). min_mentions: 최소 누적 언급 수. 기본 3.

ParametersJSON Schema
NameRequiredDescriptionDefault
sampleNo
thresholdNo
min_mentionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations by disclosing unbounded scope (all channels auto-included) and slowness, consistent with openWorldHint=true. However, readOnlyHint=false hints at possible side effects, and the description never clarifies what, if anything, gets written or modified — a meaningful gap for a diagnostic tool that should be safe to run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core purpose is front-loaded, followed by diagnostic context, usage caveat, then Args. Slightly redundant — the diagnostic purpose is restated in two adjacent sentences — but overall efficient and well-ordered with no wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema covers return values, the description handles purpose, scope, performance, and all three parameters adequately. Remaining gaps are the unclarified read/write behavior and lack of explicit sibling routing, but nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries full parameter documentation: sample (count per channel, default 80), threshold (0~1 density, default 0.05), min_mentions (cumulative count, default 3). It adds meaning well beyond the bare integer/number types and includes defaults and a range.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+outcome: scans all joined channels and measures/reports 'stock mention density' per channel. The diagnostic purpose (distinguishing stock-focused vs macro/small-talk channels) clearly separates it from the many telegram_* siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on when to use it — as a diagnostic tool for channel composition — and a performance caveat ('scans all channels so it's slow, use only when needed'). However, it doesn't name alternative tools or explicitly state when NOT to use it, leaving some sibling differentiation to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_collect_historyA

더 오래된 과거 데이터를 소급 수집하도록 백그라운드 데몬에 요청합니다.

자동 수집은 기본 7일까지. 더 오래 비웠을 때(telegram_status 의 backfill_offer) 사용자 동의 시에만 호출하세요. 무거운 작업이라 동의 없이 호출 금지.

Args: days: 소급 수집할 일수(1~90). 예: 14면 최근 14일치.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate this is not read-only, not idempotent, and not destructive, and the description adds useful behavioral context beyond these flags: it is a background daemon request, it is a heavy operation, and it requires user consent. This meaningfully informs the agent about side effects and caution needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It opens with the core purpose, then adds the critical usage condition (user consent) and the parameter explanation, with no wasted or redundant sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficiently complete for a tool with a single parameter and an existing output schema. It covers the core operation, the important consent prerequisite, the parameter range, and an example. Minor details such as how the background daemon reports completion are not described, but the output schema likely covers return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides the parameter name 'days' with no description, so schema description coverage is 0%. The description compensates well by explaining that days means the number of days to retroactively collect, providing a 1–90 range, and giving an example ('14면 최근 14일치'). This makes the parameter semantics clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: asking a background daemon to retroactively collect older history data. It also distinguishes the tool by tying it to the backfill_offer state in telegram_status, making its purpose unambiguous among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to call this tool: only when the user has been away longer than the default 7-day backfill and only with explicit user consent. It also explains when not to call it (without consent, due to heavy operation). It does not name alternative tools directly, but the usage conditions are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_dismiss_backfillA

과거 데이터 추가 수집 제안을 거절(제안 플래그 제거)합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a useful behavioral detail beyond the annotations by stating that the proposal flag is removed. However, it does not explain consequences, reversibility, or why repeated calls may differ (annotations set idempotentHint=false). It is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. Every word adds semantic value, and the core action and side effect are stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema and annotations present, the description covers the essential operation. It is slightly incomplete only in that it does not clarify when the dismissal should be used or what happens after the flag is removed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties and 100% schema description coverage, so there are no parameters for the description to document. The baseline for a zero-parameter tool applies, and no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('거절합니다' – rejects), names the exact object (과거 데이터 추가 수집 제안, or past-data additional collection proposal), and explains the concrete mechanism (removes the proposal flag). It is immediately clear how this differs from sibling tools like telegram_collect_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says only what the tool does, not when to use it versus alternatives. It names no sibling tools, no exclusions, and no conditions or prerequisites for dismissing a backfill proposal. The intended usage is only implicit in the verb 'reject'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_fp_candidatesA
Read-onlyIdempotent

오탐(잘못 잡힌 종목) 후보를 반환합니다.

'확인 표기' 없이 이름·철자만으로 자주 잡힌 것 → 일반명사·약어 충돌 의심. 확인 표기는 국내는 본문의 6자리 코드, 미국은 cashtag($NVDA) 입니다. 글쓴이가 종목임을 명시한 흔적이라는 점에서 같은 역할을 합니다. 검토 후 telegram_block_name 으로 차단 목록에 추가하세요.

Args: days: 분석 기간(일). 기본 7. max_name_len: 검사할 최대 길이. 0이면 자동 — 국내 3(짧은 이름이 충돌), 미국 5(티커 전체). min_count: 최소 '확인 표기 없는' 매칭 수. 기본 3. top: 상위 N개. 기본 40. market: "KR"(국내 종목명)/"US"(미국 티커)/"all"(합쳐서 의심도 순). 기본 all. 미국 오탐은 AI(C3.ai)·IR(Ingersoll Rand)·HBM(Hudbay Minerals)처럼 한국 증권 글에서 단어로 쓰이는 철자가 티커와 겹쳐 생깁니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
daysNo
marketNo
min_countNo
max_name_lenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable context: it explains the heuristic (matches without confirmation markers), the role of confirmation markers, and market-specific behavior (e.g., US false positives from common words like AI, IR, HBM). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose, criteria, confirmation marker definition, workflow, then parameter details. Each section earns its place and provides necessary context without redundancy. The front-loaded purpose and clear parameter list make it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description does not need to explain return values. It provides enough context to understand the algorithm, parameter behavior, and downstream action (blocking via telegram_block_name). The description is complete for a read-only analysis tool with annotations already covering safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does thoroughly. Every parameter (days, max_name_len, min_count, top, market) is described with defaults and behavioral meaning, including the automatic length logic and market-specific explanations. This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear purpose: returns false-positive candidates for stocks incorrectly detected by name/character alone. It explains what counts as a false positive (no confirmation marker, common noun/abbreviation conflicts) and even defines the confirmation markers for KR (6-digit code) and US (cashtag). This is specific and distinguishes it from downstream tools like telegram_block_name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool to identify false positives, then review and add to block list via telegram_block_name. It gives a clear workflow but does not explicitly state when to use this tool over sibling alternatives like telegram_alias_candidates or when not to use it. No exclusions or alternative selection criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_messagesA
Read-onlyIdempotent

원문 메시지를 그대로 조회합니다(drill-down).

글마다 link_content(글에 붙은 링크의 제목·설명, 발췌 유무)가 붙습니다.

Args: channel: 채널 username(@ 제외). 생략 시 전체 채널. hours: 시간 범위(시간). 기본 6. limit: 최대 메시지 수. 기본 30. link_body: true 면 링크 본문 발췌(최대 2,000자)까지 싣습니다. 기본 false(제목·설명만).

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
limitNo
channelNo
link_bodyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds behavioral details: it returns original messages with link_content, and explains link_body parameter behavior (including character limit). It doesn't contradict annotations. Since annotations cover safety, description adds useful context about return structure and parameter behavior, but doesn't describe pagination or ordering. Score 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise, front-loaded with purpose, then a note about link_content, then a clean Args list. No wasted words. Score 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, 0 required, and an output schema, description covers all parameters with defaults and behavior. It doesn't mention ordering or pagination, but that's not necessary for calling correctly. It's sufficient for an agent to use correctly. Score 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description carries full burden. It explains each parameter: channel (with format and default behavior), hours (default 6), limit (default 30), link_body (meaning and default). This is explicit and complete. Score 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb (조회합니다 - retrieves) and resource (원문 메시지 - original messages), with a drill-down hint. It also mentions the link_content attachment, which distinguishes it from search or timeline tools. Clear purpose, though it doesn't explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance. It doesn't mention alternatives or exclusions. The description implies it's for viewing original messages, but doesn't state when to prefer it over telegram_search or telegram_timeline. Score 2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_momentumA
Read-onlyIdempotent

최근 언급이 기준 구간 대비 급증한 종목(새 내러티브)을 반환합니다.

종목코드 매칭 전용 — 거시·지정학·테마(예: "미국 이란", "금리") 질문은 telegram_search 사용.

Args: hours: 최근 구간(시간). 기본 6. baseline_hours: 비교 기준 구간(시간). 기본 72. top: 상위 N개(세그먼트별). 기본 15. kind: 종목 종류 — "stock"(개별주만)/"etf"(ETF만)/"all"(전체). 기본 all. market: 시장 — "KR"(국내만)/"US"(미국만)/"all"(전체). 기본 all. kind 와 조합해 국내주식·미국주식·국내ETF·미국ETF 네 갈래로 나뉩니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
kindNo
hoursNo
marketNo
baseline_hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful algorithmic context (baseline comparison, per-segment top N) but does not disclose return format, pagination, or data-freshness behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with purpose, followed by a one-line scope/alternative statement, then a clean Args list. Every line is informative and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no schema-level descriptions, the description supplies all necessary invocation details: defaults, allowed values, and the four kind/market branches. The presence of an output schema means return-value format need not be repeated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the Args section fully documents all five parameters with defaults, allowed values, and the kind/market combination semantics. This completely compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise definition: it returns stocks whose recent mentions surged relative to a baseline period, labeled as 'new narrative'. It also declares the tool is for stock-code matching only and explicitly routes macro/geopolitical/theme questions to telegram_search, distinguishing it from a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit when/when-not pair with an alternative: use it for stock-code matching, and use telegram_search for macro/geopolitical/theme queries. This leaves no ambiguity about the primary intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_send_meA

데일리 브리핑 등을 사용자 본인 텔레그램 'Saved Messages(나에게)'로 전송합니다.

  • messages: plain-text 문자열 리스트. 각 원소 = 텔레그램 메시지 1개. 예) telegram_send_me(["오늘 시황 요약 ...", "버즈: 많이 언급 vs 급증 ..."])

  • 마크다운/HTML 미적용 — 텔레그램에 기호가 그대로 보이므로 plain text 로 작성(별표·표 금지).

  • 수신자는 항상 본인(Saved Messages)으로 고정 — 남에게는 보낼 수 없습니다(ToS 안전).

  • 전송은 수집 데몬을 통해 이뤄집니다(수집용 세션과 충돌 방지). 데몬 미가동이면 에러 반환.

  • 4096자 초과 메시지는 자동 분할. 반환: 성공 여부 + 전송된 메시지 수.

'아침 주식 비서'처럼 스케줄(매일 07:00) 작업에서 브리핑을 작성해 이 도구로 보냅니다. 내용·개수·구성(시황/버즈/시세/공시)은 호출하는 쪽에서 자유롭게 정합니다.

★ 한 번에 완성해 단 한 번만 호출하세요. 보내기 에 한글 오타·깨진 글자를 검토하고, 전송 후에는 어떤 경우에도 재발송/정정 재호출하지 마세요(중복 메시지 방지). ★ 수치·사실은 데이터(텔레그램 원문/도구 결과)에 있는 것만 쓰세요. 출처에 없는 숫자를 지어내지 말고, 가능하면 근거 채널/원문을 함께 밝히세요.

ParametersJSON Schema
NameRequiredDescriptionDefault
messagesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses recipient fixed to self, daemon dependency and error behavior, no markdown/HTML rendering, 4096-character auto-splitting, and the duplicate-message risk. This gives the agent essential behavioral context for a non-idempotent send action, and it does not contradict the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and organized into clear bullets and starred warnings. It is somewhat long and has minor repetition between the general introduction and the '아침 주식 비서' usage example, but every block contributes useful operational or safety information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter send tool, the description covers the message content, recipient, transmission mechanism, failure mode, length limits, return value, and content-safety rules. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully documents the only parameter: messages is a plain-text string list where each element becomes one Telegram message. It also explains plain-text formatting, auto-splitting behavior, and provides a realistic example call, making invocation unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence uses a specific verb (전송합니다) and a precise destination (user's own Telegram 'Saved Messages'), clearly identifying this as a send-to-self tool. This distinguishes it from the many read/search/classify sibling tools, and the example call reinforces the intended action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description places the tool in a concrete workflow: write a briefing in a scheduled task, then send it once. It adds strong operational rules such as 'call only once' and 'never resend or correct after sending.' It does not explicitly name alternative tools or exclusion cases, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_set_tierA

채널 tier(성격)를 수동 지정합니다. 자동시드를 덮어쓰며 이후 재시드가 보존합니다.

tier 는 버즈 집계의 채널 가중치 근거입니다.

Args: channel: 채널 username(@ 제외) 또는 6자리가 아닌 숫자 channel_id. tier: analyst(애널리스트) | research(독립리서치) | info(종합·속보) | gossip(찌라시). weight: 가중 계수(생략 시 기본 analyst1.0/research0.8/info0.5/gossip0.3). note: 메모(선택).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
tierYes
weightNo
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a mutating, non-idempotent operation, and the description adds meaningful behavioral detail: it overwrites the auto-seeded tier, the manual tier survives future re-seeds, and tier is the basis for buzz aggregation weights. This is useful context beyond the structured flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: purpose, persistence behavior, and weighting impact come first, followed by a clean Args list. Every sentence earns its place and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition covers purpose, side effects, and all parameter semantics, and an output schema exists so return values do not need explanation. The only meaningful gap is explicit when-to-use guidance relative to the large sibling set, which makes it very strong but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining each parameter: channel format (username without @ or non-6-digit numeric ID), allowed tier values with labels, default weight per tier, and optional note. An agent could construct correct arguments from this alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('채널 tier(성격)를 수동 지정합니다') and explains that it overrides the automatic seed. This distinguishes it from automatic-classification siblings such as telegram_classify_channels, even though no sibling is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The manual-override context is clear ('수동 지정', '자동시드를 덮어쓰며'), so an agent can infer when it is relevant. However, it never explicitly states when to prefer this tool over automatic classification or other siblings, and no direct alternatives or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_statusA
Read-onlyIdempotent

로그인·수집 상태와 백그라운드 수집 데몬 상태를 반환합니다.

status(healthy/degraded/failed)와 last_error.code 를 보고, 문제가 있으면 recovery.instruction 을 사용자에게 그대로 전하세요. 문제가 있으면 LeetKit Manager의 [진단]이나 상단 [지원 문의]를 안내하세요. 터미널 명령은 안내하지 마세요.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe read-only, idempotent operation. The description adds meaningful context beyond that: it explains health triage behavior, requires passing recovery.instruction through unchanged, and forbids terminal-command guidance. No contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short, purposeful sentences in Korean. The main purpose is front-loaded, followed by concrete triage rules and an explicit boundary. Every sentence earns its place with no redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only status tool with an output schema, the description is complete. It covers purpose, expected status values, user-facing actions, and a clear prohibition. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and 100% schema coverage, so the description has no parameters to document. The baseline for param-less tools is 4, and the description correctly focuses on output semantics and user handling instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: it returns login/collection status and background daemon status. It also names the meaningful fields (status, last_error.code, recovery.instruction), which distinguishes it from sibling tools that send, sync, or search data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is evident: check this tool for login/collection/daemon health. It gives strong post-invocation guidance – surface recovery.instruction verbatim, direct users to LeetKit Manager diagnostics/support, and never provide terminal commands – but it does not explicitly name alternatives or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_stock_buzzA
Read-onlyIdempotent

특정 종목의 텔레그램 언급 요약과 원문 샘플을 반환합니다.

Args: query: 종목명 또는 6자리 종목코드. hours: 집계 시간 범위(시간). 기본 24. samples: 원문 샘플 개수. 기본 8.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
queryYes
samplesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns an aggregate summary plus raw samples and that the time window and sample count are configurable, which is useful, but it does not disclose other behaviors such as data coverage limits or no-data handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose statement followed by a tight Args block. It is front-loaded with the core function, and every line carries relevant information without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only three flat parameters and an output schema, the description covers the input semantics and returned content well. It lacks comparative context for choosing among siblings, but that gap is already captured by the usage_guidelines dimension; operationally an agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for parameter meaning, and it does so completely. It explains that query is a stock name or 6-digit code, hours is the aggregation time window (default 24), and samples is the number of raw samples (default 8). All three parameters are defined with defaults, fully compensating for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb 'returns' (반환합니다) and a specific resource: a summary of Telegram mentions and original-text samples for a specific stock. The '특정 종목' qualifier suggests per-stock scoping that distinguishes it from broader siblings like telegram_trending, though no alternative is named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus the many sibling telegram_* tools. There is no mention of use cases, exclusions, or alternatives such as telegram_buzz_score, telegram_trending, or telegram_momentum. The agent is left to infer the appropriate context from the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_syncA

최근 N분간의 텔레그램 메시지를 수집·구조화해 로컬 DB에 저장합니다.

평소엔 백그라운드 수집 데몬이 DB를 채우므로 수동 호출은 보통 불필요합니다. 데몬이 가동 중이면 그쪽이 텔레그램 세션을 소유하므로(동시 접속 시 충돌) 직접 sync는 건너뛰고 DB 신선도만 보고합니다. 데몬이 없을 때만 직접 1회 수집합니다.

Args: minutes: 수집 대상 시간 범위(분). 기본 60. per_channel_limit: 채널당 최대 조회 메시지 수. 기본 500.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutesNo
per_channel_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false) already signal a write operation; the description confirms and enriches this by disclosing the session-ownership conflict with the daemon and the write-to-DB behavior. This adds behavioral context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by relevant guidance and an Args block. Every sentence earns its place, though the daemon situation is spread across several sentences that could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a moderate-complexity sync tool: it explains the daemon interaction, documents both params, and relies on the existing output schema for return values. No critical gaps for correct invocation, though permissions/auth are not mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden — and it delivers. Both parameters are documented with meaning, units (minutes, count), and defaults (60, 500), fully compensating for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: collect/structure Telegram messages over the last N minutes and persist them to a local DB. The purpose is unambiguous, but it doesn't differentiate from overlapping siblings like telegram_collect_history or telegram_messages — the description never names a sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Exceptionally explicit. It gives the when (no daemon running), the when-not (daemon active), the why (session ownership conflict), and the fallback behavior (skip sync, report DB freshness only). This is the strongest part of the definition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_timelineA
Read-onlyIdempotent

특정 종목의 버즈 전개(타임라인)를 반환합니다.

이 종목이 언제 어느 채널에서 처음 터져 어떻게 번졌나(종단): 최초 언급 채널·시각, 시간대별 독립 언급·확산 채널 수·velocity·베이스라인 배율·원문 샘플.

종목코드 매칭 전용 — 거시·지정학·테마(예: "미국 이란", "금리") 질문은 telegram_search 사용.

Args: query: 종목명 또는 6자리 종목코드. hours: 윈도우(시간). 기본 72. bucket_minutes: 시간 버킷 크기(분). 기본 60.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
queryYes
bucket_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly/openWorld/idempotent hints, so the bar is lower. The description adds useful context about the returned timeline content (first mention channel/time, velocity, baseline multiplier) and scope (stock code matching only), but doesn't discuss error behavior or rate limits, which are not critical given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main verb and resource, then details, then usage guidance, then parameter definitions. No filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 3-parameter tool and an output schema present, the description covers input semantics, defaults, scope, and usage boundaries. The existence of the output schema means return-value details are handled externally. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It defines all three parameters: query (stock name or 6-digit code), hours (default 72), bucket_minutes (default 60). This is essential meaning the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'returns the buzz development (timeline) of a specific stock.' It further lists the data points (first mention channel/time, independent mentions, velocity, etc.) and distinguishes from sibling telegram_search by explicitly excluding macro/geopolitical/theme queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Exclusively for stock code matching' and directs non-stock queries to telegram_search with examples ('미국 이란', '금리'). This is clear when-to-use and 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.

telegram_velocityA
Read-onlyIdempotent

종목별 언급의 시간대별 흐름과 급등(velocity)을 반환합니다.

시간 버킷별 독립 언급을 집계해 직전 대비 증가율과 spike 여부를 봅니다. 베이스라인 배율(baseline_ratio) 동봉.

Args: query: 종목명/6자리 코드(생략 시 velocity 상위 top 종목). bucket_minutes: 시간 버킷 크기(분). 기본 30. window_hours: 집계 윈도우(시간). 기본 6. spike_min: 최근 버킷 급등 임계값(건수). 기본 5. top: query 미지정 시 상위 N개. 기본 15.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
queryNo
spike_minNo
window_hoursNo
bucket_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent, and the description adds meaningful behavior beyond that: it aggregates independent mentions per time bucket, computes increase versus the previous bucket, flags spikes, and includes baseline_ratio. This gives an agent a solid sense of what the tool does internally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: purpose statement first, then computation summary, then a clear Args list. Every sentence adds value and there is no repetition of schema or annotation fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations, an output schema, and five optional parameters, the description covers the tool's core behavior, parameters, defaults, and output concepts like baseline_ratio. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage, but the description fully compensates by documenting all five parameters with meaning and defaults. Each parameter's role is explained, including the conditional behavior of query and top.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it returns time-bucket flows and velocity of per-stock Telegram mentions, with increase rates and spike flags. It does not explicitly differentiate from siblings like telegram_momentum or telegram_trending, but the velocity/spike focus is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides parameter-level defaults and behavior (e.g., query omitted returns top velocity stocks), but gives no guidance on when to choose this tool over sibling tools such as momentum, trending, or buzz_score. No exclusions or alternate conditions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telegram_watchlistA

'내 종목/보유 종목'이 텔레그램에서 어떻게 거론되는지 — 언급 원문·요약 근거를 반환합니다.

'내 종목 분석/소식/여론/뭐래/텔레그램에서 어때' 류 요청에 호출하세요. 종가·차트·이동평균· 기술지표가 아니라 텔레그램에서 그 종목을 두고 무슨 말이 도는지(원문·채널·링크)를 줍니다. 이 데이터로 종목별 '여론·이슈'를 요약하세요(기술지표는 사용자가 원할 때만 StockLens 로). 종목 등록/삭제는 텔레그램 '!보유 설정 …' 명령으로.

Args: hours: 집계 시간 범위(시간). 기본 24.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains what data is returned (mentions, original text, channels, links) and its purpose in summarizing sentiment, but does not detail performance limits or data freshness. Annotations already indicate it's not destructive and is open-world, but the description adds relevant context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise, with the core purpose front-loaded. The additional notes on usage and alternatives are valuable, but slightly verbose in the middle section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and a rich context of siblings, the description covers the main usage and output expectations, making it sufficiently complete for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 0% for the single parameter 'hours', but the description provides basic semantics by stating it is the aggregation time range in hours with a default of 24. This is sufficient, though minimal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns mentions of the user's stocks on Telegram, including original text and summary rationale. It distinguishes itself from technical indicators and other analytical tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly specifies when to call (requests about Telegram mentions, sentiment, etc.) and when not to (technical indicators, charts, moving averages). It also names alternatives like StockLens for technical analysis and mentions the command for registration/deletion.

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.

  1. 18 tool updatesv0.7.0
    • Changedtelegram_alias_candidates3 fields changed
      • removedInput schema / properties / days / default
        Removed value: -7
      • removedInput schema / properties / min_count / default
        Removed value: -2
      • removedInput schema / properties / top / default
        Removed value: -40
    • Changedtelegram_block_name2 fields changed
      • removedInput schema / properties / dry_run / default
        Removed value: -false
      • removedInput schema / properties / note / default
        Removed value: -""
    • Changedtelegram_briefing1 field changed
      • removedInput schema / properties / hours / default
        Removed value: -12
    • Changedtelegram_buzz_score14 fields changed
      • removedInput schema / properties / exclude_gossip / default
        Removed value: -false
      • removedInput schema / properties / kind / default
        Removed value: -"all"
      • removedInput schema / properties / market / default
        Removed value: -"all"
      • removedInput schema / properties / min_independent / default
        Removed value: -0
      • removedInput schema / properties / only_types / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / only_types / default
        Removed value: -null
      • addedInput schema / properties / only_types / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / only_types / type
        Added value: +"array"
      • removedInput schema / properties / sentiment / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / sentiment / default
        Removed value: -null
      • addedInput schema / properties / sentiment / type
        Added value: +"string"
      • removedInput schema / properties / sort_by / default
        Removed value: -"buzz_score"
      • removedInput schema / properties / top / default
        Removed value: -20
      • removedInput schema / properties / window_hours / default
        Removed value: -24
    • Changedtelegram_classify_channels3 fields changed
      • removedInput schema / properties / min_mentions / default
        Removed value: -3
      • removedInput schema / properties / sample / default
        Removed value: -80
      • removedInput schema / properties / threshold / default
        Removed value: -0.05
    • Changedtelegram_collect_history1 field changed
      • removedInput schema / properties / days / default
        Removed value: -7
    • Changedtelegram_fp_candidates5 fields changed
      • removedInput schema / properties / days / default
        Removed value: -7
      • removedInput schema / properties / market / default
        Removed value: -"all"
      • removedInput schema / properties / max_name_len / default
        Removed value: -0
      • removedInput schema / properties / min_count / default
        Removed value: -3
      • removedInput schema / properties / top / default
        Removed value: -40
    • Addedtelegram_link_content
    • Changedtelegram_messages6 fields changed
      • removedInput schema / properties / channel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel / default
        Removed value: -null
      • addedInput schema / properties / channel / type
        Added value: +"string"
      • removedInput schema / properties / hours / default
        Removed value: -6
      • removedInput schema / properties / limit / default
        Removed value: -30
      • addedInput schema / properties / link_body
        Added value: +{
        +  "title": "Link Body",
        +  "type": "boolean"
        +}
    • Changedtelegram_momentum5 fields changed
      • removedInput schema / properties / baseline_hours / default
        Removed value: -72
      • removedInput schema / properties / hours / default
        Removed value: -6
      • removedInput schema / properties / kind / default
        Removed value: -"all"
      • removedInput schema / properties / market / default
        Removed value: -"all"
      • removedInput schema / properties / top / default
        Removed value: -15
    • Changedtelegram_search7 fields changed
      • removedInput schema / properties / channel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel / default
        Removed value: -null
      • addedInput schema / properties / channel / type
        Added value: +"string"
      • removedInput schema / properties / hours / default
        Removed value: -72
      • addedInput schema / properties / in_links
        Added value: +{
        +  "title": "In Links",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / limit / default
        Removed value: -30
      • addedInput schema / properties / link_body
        Added value: +{
        +  "title": "Link Body",
        +  "type": "boolean"
        +}
    • Changedtelegram_set_tier4 fields changed
      • removedInput schema / properties / note / default
        Removed value: -""
      • removedInput schema / properties / weight / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / weight / default
        Removed value: -null
      • addedInput schema / properties / weight / type
        Added value: +"number"
    • Changedtelegram_stock_buzz2 fields changed
      • removedInput schema / properties / hours / default
        Removed value: -24
      • removedInput schema / properties / samples / default
        Removed value: -8
    • Changedtelegram_sync2 fields changed
      • removedInput schema / properties / minutes / default
        Removed value: -60
      • removedInput schema / properties / per_channel_limit / default
        Removed value: -500
    • Changedtelegram_timeline2 fields changed
      • removedInput schema / properties / bucket_minutes / default
        Removed value: -60
      • removedInput schema / properties / hours / default
        Removed value: -72
    • Changedtelegram_trending4 fields changed
      • removedInput schema / properties / hours / default
        Removed value: -24
      • removedInput schema / properties / kind / default
        Removed value: -"all"
      • removedInput schema / properties / market / default
        Removed value: -"all"
      • removedInput schema / properties / top / default
        Removed value: -20
    • Changedtelegram_velocity7 fields changed
      • removedInput schema / properties / bucket_minutes / default
        Removed value: -30
      • removedInput schema / properties / query / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / query / default
        Removed value: -null
      • addedInput schema / properties / query / type
        Added value: +"string"
      • removedInput schema / properties / spike_min / default
        Removed value: -5
      • removedInput schema / properties / top / default
        Removed value: -15
      • removedInput schema / properties / window_hours / default
        Removed value: -6
    • Changedtelegram_watchlist1 field changed
      • removedInput schema / properties / hours / default
        Removed value: -24
  2. 5 tool updatesv0.6.1
    • Changedtelegram_block_name1 field changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "default": false,
        +  "title": "Dry Run",
        +  "type": "boolean"
        +}
    • Changedtelegram_buzz_score3 fields changed
      • addedInput schema / properties / market
        Added value: +{
        +  "default": "all",
        +  "title": "Market",
        +  "type": "string"
        +}
      • addedInput schema / properties / min_independent
        Added value: +{
        +  "default": 0,
        +  "title": "Min Independent",
        +  "type": "integer"
        +}
      • addedInput schema / properties / sort_by
        Added value: +{
        +  "default": "buzz_score",
        +  "title": "Sort By",
        +  "type": "string"
        +}
    • Changedtelegram_fp_candidates2 fields changed
      • addedInput schema / properties / market
        Added value: +{
        +  "default": "all",
        +  "title": "Market",
        +  "type": "string"
        +}
      • changedInput schema / properties / max_name_len / default
        Previous value: -3New value: +0
    • Changedtelegram_momentum1 field changed
      • addedInput schema / properties / market
        Added value: +{
        +  "default": "all",
        +  "title": "Market",
        +  "type": "string"
        +}
    • Changedtelegram_trending1 field changed
      • addedInput schema / properties / market
        Added value: +{
        +  "default": "all",
        +  "title": "Market",
        +  "type": "string"
        +}
  3. 22 tool updatesv0.4.3
    • First observedtelegram_add_alias
    • First observedtelegram_alias_candidates
    • First observedtelegram_block_name
    • First observedtelegram_briefing
    • First observedtelegram_buzz_score
    • First observedtelegram_channels
    • First observedtelegram_classify_channels
    • First observedtelegram_collect_history
    • First observedtelegram_dismiss_backfill
    • First observedtelegram_fp_candidates
    • First observedtelegram_messages
    • First observedtelegram_momentum
    • First observedtelegram_search
    • First observedtelegram_send_me
    • First observedtelegram_set_tier
    • First observedtelegram_status
    • First observedtelegram_stock_buzz
    • First observedtelegram_sync
    • First observedtelegram_timeline
    • First observedtelegram_trending
    • First observedtelegram_velocity
    • First observedtelegram_watchlist

TDQS

A3.9/5.0

Scored across 23 tools

Disambiguation3/5

The set contains several overlapping analytics tools (telegram_trending, telegram_momentum, telegram_buzz_score, telegram_velocity, telegram_stock_buzz), and telegram_trending with sort_by='baseline_ratio' closely resembles telegram_momentum. However, the detailed descriptions and explicit routing instructions (e.g., stock-code matching vs telegram_search) help an agent distinguish most tools in practice.

Naming Consistency4/5

All tools share the consistent telegram_ prefix and snake_case format, which makes the set predictable. The internal style is not strictly verb_noun—telegram_velocity and telegram_momentum are noun-like while telegram_add_alias and telegram_send_me are verb-like—but this is a minor deviation rather than a chaotic mix.

Tool Count3/5

23 tools is on the heavy side for an agent-facing server and falls in the 16–25 borderline range. Many tools have distinct roles across collection, analytics, curation, and delivery, but the analytics cluster could likely be consolidated without significant capability loss.

Completeness4/5

The server covers the full Telegram stock-buzz workflow: collection/status/backfill, raw message search, ranking and stock-level analytics, channel classification/tiering, alias/blocklist curation, and user delivery. Minor gaps such as explicit channel add/remove and message-ID-level retrieval exist, but they are not central to the stated purpose and can be worked around.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers