legend-saju
Legend Saju
사주 몇 글자를 LLM에 넘기는 래퍼가 아니다. 계산식, 유파, 출처, 불확실성을 구조화해 반환하는 동양 역학 엔진이다.
같은 생년월일을 여러 전통으로 계산한다. 계산 경로 안에 숨겨진 LLM 호출은 없다.
출처가 연결된 지식 777건 · 대육임 720국 · 한국 인명용 한자 관측 9,495건 · 계산 경로 모델 호출 0회
Legend Saju는 사주·명리, 자미두수, 기문둔갑, 대육임, 철판신수, 성명학 등 서로 다른 전통의 계산을 하나의 엔진으로 다룬다. 유파가 다르면 억지로 하나의 결론으로 합쳐지지 않고, 생일을 모르면 임의의 시각을 만들지 않는다.
가장 빠른 사용법
현재 공개 버전은 로컬 STDIO MCP와 HTTPS 원격 MCP를 함께 제공한다. 로컬 서버는 Node.js 20 이상이 설치돼 있으면 별도 API 키 없이 실행할 수 있다.
설치 없이 원격 서버 연결하기
공개 MCP 엔드포인트는 다음 주소다.
https://legend-saju-mcp-production.up.railway.app/mcpCodex에서는 다음 명령으로 연결할 수 있다.
codex mcp add legend-saju-remote --url https://legend-saju-mcp-production.up.railway.app/mcp원격 서버는 입력값을 저장하지 않으며 모델 API를 호출하지 않는다. 공개 엔드포인트에는 요청 크기, 분당 요청 수, 동시 실행 수 제한이 적용된다. 외부 서버에 생년월일이나 이름을 보내고 싶지 않다면 아래 로컬 방식을 사용하면 된다.
플러그인으로 설치하기
Codex와 ChatGPT 데스크톱에서는 MCP 연결과 자연어 사용 지침을 함께 묶은 플러그인을 설치할 수 있다. 먼저 이 저장소를 플러그인 소스로 추가한다.
codex plugin marketplace add SihyeonJeon/legend-saju --ref main그다음 Plugins 화면에서 Legend 사주를 설치하면 된다. 이 방식은 공개 원격 MCP를 사용하므로 Node.js나 별도 API키가 필요없다. ChatGPT 웹의 Pluggins Directory 등록은 별도의 제출·검토 단계다.
Codex에서 한 줄로 연결하기
터미널에서 다음 명령을 실행한다.
codex mcp add legend-saju -- npx -y --package=github:SihyeonJeon/legend-saju#main legend-saju-mcp연결 여부를 확인한다.
codex mcp listCodex를 새로 시작한 뒤 /mcp에서 legend-saju가 보이면 설치가 끝난 것이다. 이제 도구 이름이나 JSON을 말하지 않고도 평소처럼 질문하면 된다.
2000년 7월 30일 오전 8시 44분 여자입니다직업, 재물, 결married, 앞으로 3년을 종합해서 봐주세요.
남자 1999년 7월 14일 오전 11시 24분, 여자 2000년 7월 30일 오전 8시 44분입니다. 궁합과 결혼 가능 시기를 함께 봐주세요.
이름은 김상수, 한자는 金相수입니다. 사주와 분리해서성명학 근거도 분석해 주세요.
Codex CLI, Codex IDE 확장, ChatGPT 데스크톱 앱은 같은 Codex MCP 설정을 공유한다. 자세한 연결 설정은 OpenAI의 MCP 안내를 참조하면 된다.
다른 MCP 클라이언트에서 연결하기
STDIO MCP를 지원하는 클라이언트라면 아래 실행 설정을 사용할 수 있다. 설정 파일 위치는 클라이언트마다 다르다.
{
"mcpServers": {
"legend-saju": {
"command": "npx",
"args": ["-y", "--package=github:SihyeonJeon/legend-saju#main", "legend-saju-mcp"]
}
}
}로컬 소스를 고정해서 쓰고 싶다면 저장소를 빌드한 뒤 CLI 래퍼를 직접 실행한다.
{
"mcpServers": {
"legend-saju": {
"command": "node",
"args": ["/절대/경로/legend-saju/bin/legend-saju-mcp.js"]
}
}
}로컬 방식은 저장소 루트에서 npm ci && npm run build를 한 번 실행해야 한다.
ChatGPT 웹에서 바로 사용할 수 있나
HTTPS 원격 MCP 서버는 준비됐다. 다만 공개 URL이 만든 것과 ChatGPT 플러그인 디렉터리에 등록되는 것은 별개의 절차다. 개발자 모드나 원격 MCP 연결을 지원하는 클라이언트에서는 위 URL을 직접 이용할 수 있고, 일반 사용자에게 설치형 플러그인으로 내보내려면 별도의 등록·검토 절차가 남고 있다.
Related MCP server: mcp-luopan
MCP가 하는 일
MCP 서버는 읽기 전용 도구 세 개를 제공한다.
도구 | 역할 |
| 현재 엔진에 들어 있는 계산법, 출처, 데이터 범위를 확인한다 |
| 자연어 질문에 맞는 계산법을 찾는다 |
| 질문과 입력값을 받아 관련 계산법을 함께 실행한다 |
도구가 세 개라고 해서 역학 기능이 세 개 인 것은 아니다. 세 도구는 거대한 기능 레지스트리를 살펴보고, 찾고, 실행하는 작은 관문이다.
사용자의 자연어 질문
↓
호스트 모델이 입력을 정리하고 계산법을 탐색
↓
Legend Saju MCP가 결정론적 계산 수행
↓
출처·유파·충돌·누락 정보가 포함된 구조화 결과
↓
호스트 모델이 사람이 읽기 쉬운 한국어로 설명Legend Saju MCP 자체는 OpenAI나 Anthropic API 키를 읽지 않으며 모델을 호출하지 않는다. 대화와 설명에는 사용 중인 Codex·Claude·기타 클라이언트의 기존 모델 세션이 쓰인다.
MCP와 동봉 플러그인의 차이
MCP만 연결하면 계산 엔진과 세 도구를 바로 사용할 수 있다.
plugins/legend-saju/의 Codex 플러그인에는 MCP 설정과 자연어 사용 지침이 함께 들어 있다. 사용자가 capability ID나 입력 스키마를 고르지 않도록 호스트 모델의 처리 방식을 보강한다.계산 능력은 플러그인 안에 축소 복사쩍지 않다. MCP와 플러그인 모두 같은 공개 엔진 진입점을 사용한다.
자연어 입력
이 프로젝트가 의도한 인터페이스는 접수 폼이나 인텐트 메뉴가 아닌 대화다. 모델은 대화에서 확실한 정보만 추출하고, 필요한 계산법을 찾은 뒤, 엔진이 돌려주 는 근거를 설명한다.
2004년 8월 3일 양력 남자고 태어난 시간은 몰라.
경기도 구리에서 태어났어. 앞으로 3년 직업과 돈을 봐줘.출생시간을 모른다고 하면 엔진은 정오를 임의로 넣지 않는다. 자시의 날짜 경계를 두 방법으로 예비 후보 차트를 분리해 반환한다.
개발자로 실행하기
git clone https://github.com/SihyeonJeon/legend-saju.git
cd legend-saju
npm ci
npm test
npm run build
npm run demoNode.js 20 이상이 필요하다. 이 저장소는 ESM 전용이며 아직 npm에는 배포하지 않았다.
import { resolve } from "./dist/index.js";
const result = resolve({
birth: {
year: 2000,
month: 7,
day: 30,
hour: 8,
minute: 44,
calendar: "solar",
gender: "여",
birthTimeAccuracy: "recorded"
},
question: "직업과 재물, 연애 결혼, 앞으로 3년",
timelineRange: { startYear: 2026, endYear: 2028 }
});
console.log(result.dossier?.claims);
console.log(result.dossier?.conflicts);
console.log(result.routes);반환값은 완성된 점검구문이 아니라 계산과 해석의 근거 데이터다.
{
selection: { requested: string[]; selected: string[]; unsupported: string[] };
routes: CapabilityPreflight[];
dossier?: {
claims: EngineClaim[];
conflicts: ClaimConflict[];
synthesis: DomainSynthesis[];
timeline?: LifeTimeline;
blockedSystems: { capabilityId: string; reason: string }[];
};
evidence: SajuEvidence[];
nameAnalysis?: KoreanNameAnalysis;
noModelCalls: true;
interpretationBoundary: string;
}왜 만들었나
많은 역학 AI 서비스는 프롬프트에서 시작한다. Legend Saju는 그 한 층 아래인 계산과 근거에서 시작한다.
결정론적 코어: 같은 입력은 LLM 없이 같은 계산 결과를 만든다.
유파 보존: 명리 관법이나 자미두수 사화표가 다르면 각각의 결과로 남는다.
출생시간 미상 처리: 모르는 시각은 후보군으로 계산하며 정오로 꾸며내지 않는다.
출처 추적: 기능마다 성숙도, 근거, 역할, 유파, 출처 ID, 빠진 차원을 기록한다.
운명 점수 없음: 여러 체계의 근거와 충돌을 하나의 수치로 뭉개지 않는다.
실제로 잇는 자산
이 저장소는 모델 호출 인터페이스뿐만 아니라 어려운 데이터와 규칙 작업을 함께 공개한다.
자산 | 공개 범위 |
다국어 역학 지식 저장소 | 36개 영역, 777개 근거 항목 |
명리 용어집 | 한국어·한자·중국어·일본語 777개 항목 |
자미두수 용어집 | 언어별로 정렬된 214개 항목 |
궁통보감 | 일간×월령 120칸과 실행 가능한 하위 예외절 66개 |
자미두수 궁성 이론 | 구조한 규칙 163개와 서로 분리 계산되는 사화 프로필 3종 |
대육임 | 60일진×12천반, 닫은 720국 전송표 |
철판신수 질문시각 path | 괘 1,500칸, 선천 144행, 평생 2,028행 |
한국 성명학 | 대법원 인명용 한자 관측 9,495건과 획수 이형 관측 2003건 |
원전 범위가 명시된 81수 | 81개 전체 행과 1차 출처 대조 |
해몽 연구 데이터 | 주공해몽 988개, アルテミドロス 211절, 교차문화 감사 시드 5개 |
검사 가능한 원본 데이터는 data/에 있다. 실행에 필요한 지식은 런타임에 포함되므로 원격 데이터베이스나 숨겨진 검색 서비스에 의존하지 않는다.
추출 결과는 파일 단위로 고정되어 있으며, 최적화된 유일한 계산 경로는 자미두수 144개 조합에서 기존 결과와 바이트 단위로 일치했다. 자세한 내용은 docs/PARITY.md에 기록되어 있다.
구현 범위
체계 | 현재 구현 범위 |
만세력·사주 원국 | 양력·음력·윤달 변환, 사주팔자, 대운, 날짜 경계 |
명리 | 월령, 지태, 지장간, 십성, 심자, 합충형파해, 용신 방법 3가지, 궁통보감 120칸 |
자미두수 | 12궁, 삼방사정, 복수 사무 프로필, 비성 연결, 중복 운한 |
대육임 | 일진60×12천반의 닫힌 표와 경계가 명시된 과천법 |
기문둔갑 | 시가전반, 구궁, 구성, 팔문, 팔신, 직선 등 |
철판신수 | 세 판본의 황극 연쇄와 별도 질문시각 14계열, 선천수, 108년 조문수 |
한국 성명학 | 인명용 한자 9,495건, 유니코드·자형 분해, 사용자가 밝힌 획수 체계의五격 계산, 원전 범위 81数 |
기능 수를 README의 고정 숫자로 믿기보다 getEngineManifest()로 현재 레지스트리를 확인하는 편이 정확하다.
생년시각은 현지 민간시간로 해석한다. timezone과 longitudeE는 출생지 메타데이터로 보존하지만, 기본 차트가 근사 진태양시 보늜적으로 적용하지는 않는다. 이 누락은 기능 및 입력 감사 메타데이터에 기록된다.
wrong한 출생 정보는 구조화된 blocked 경로를 통해 반환되어 결과물과 함께 정정 요청할 된다. 존재할 수 없는 targetDate 또는 questionDateTime는 날짜 기반 계산 전체를 안전하게 진행할 수 없으므로 요청 자체가 거부됩니다.
하나의 전면적인 진입점
import { resolve } from "./dist/index.js";resolve({ question, ...inputs })는 현재 레지스트리를 검색하고, 질문을 모두 경로에 맞추고, 실행 가능한 계산기를 호출하고, 부족한 입력을 숨기지 않은 채 반환한다. requestedCapabilities는 닫힌 enum이 아닌 일반 문자열을 받는다. 즉, 엔진에 새 모듈을 추가해도 모든 클라이언트 스키마를 함께 바꿀 필요가 없다.
resolveAsync의 name이름으로 전달하면 다음의 한국 성명학 경로가 열린다. 실제 성과 이름 한자를 9,495개 관측 스냅샷과 대조하고, 법적 사용 가능성, 배당 음수, 관측된 획수 후보, 유니코드, 자체 분해, 사용자가 밝힌 五格 계산법, 81数 대조를 서로 다른 근거 층으로 유지한다.
현재 동기에 있는 resolve는 계산 전용의 이용자와 호환된다. 비동기식은 이름이 들어로날 때만 대량의 성명학 데이터를 지연 로딩하므로 일반적인 사주 계산의 시작 비용을 늘리지 않는다.
analyze(input)는 타입이 정해진 출생 명세 API이다. query({ intent, ... })는 기존 내용 봇이 사용하던 26개 intent 互換 interface이다. 콘텐츠 작성, 프롬프트, 게시 자동화는 계산 코어에 마구 뒤섞지 않는다.
성능
재현 가능한 벤치마크를 포함한다.
npm run benchmark현재 Apple Silicon 도구와 Node 26에서 최적화 기준은 四柱 원단 query 중앙값 1.13ms, 생출시간을 아는 전체 명세 중앙값 약 600ms, 새 프로세스 import 중앙값 63.1ms였다. 기기와 환경에 따라 다를 수 있는 첫 번째 공학적 관측값이다. 최신 환경과 측정법은 PERFORMANCE.md를 참조한다.
생출시간을 모를 때
const result = analyze({
birth: {
year: 2004,
month: 8,
day: 3,
calendar: "solar",
gender: "남",
birthTimeAccuracy: "unknown"
},
question: "전체 인생"
});固定되는 기둥 가 변하는 관계, 모든 神杀 후보를 분리하여 반환한다. 과거 사건으로 후보를 비교할 수 있어도, 엔진이 하나의 생출시각을 해라고 단독으로 판정하지 않는다.
신비보다 방법론
이 프로젝트는 다음 단계를 구분한다.
역법과 원국 계산
구조 관찰
유파에 따른 해석
여러 체계의 종합
인간 또는 LLM이 작성한 설명
제품 수준의 주장을 하기 전에 방법론과 기능 경계를 읽어야 한다.
실제 개발 과정에는 개발 순서와 다중언어 연구 쿼리, 재현 가능한 에이전트 과정이 들어 있다. 유지 관리자용 GitHub 공개 체크리스트는 docs/RELEASING.md에 있다.
공개 상태
지원 배포 대상은 공개한 GitHub 소스입니다. package.json은 private로 지정되어 npm 게시를 막고 있습니다. npm run release:check는 공개 파일이 소스 스냅샷과 일치하는지, 흔한 비밀값 패턴이 섞여 있지 않는지 확인합니다. 데이터의 출처와 공개 범위는 DATA_LICENSES.md와 release-boundary.json에 명시되어 있습니다.
다음 단계
MCP 클라이언트를 쓰지 않는 사람을 위한 선택식 입력 화면
원격 MCP 운영 안정화와 선택 인증
기본은 비공개로 동작하는 독립형 생년월일 입력 화면
별도 라이선스의 해몽 데이터 팩
추가 원전 고정값과 유파별 독립 검토
신중한 사용
Legend Saju는 전통적 역법 체계를 재현하고 비교합니다. 소프트웨어 검증을 통과했다는 것은 문서화된 계산을 재현한다는 뜻이며, 과학적인 예측 능력이 증명되었다는 의미는 아닙니다. 의료·법률·재정·정신건강 전문가의 대안으로 사용되지 않습니다.
라이선스
프로젝트 코드는 Apache-2.0입니다. 외부 라이브러리와 데이터셋은 각각 이 용에 대한 다음. DATA_LICENSES.md와 THIRD_PARTY_NOTICES.md를 참조하십시오.
Available Tools
9 toolslegend_saju_analyze_compatibilityAnalyze two-person compatibilityARead-onlyInspect
Use this when the user asks 궁합, 결혼 가능성, relationship compatibility, or wants two birth charts compared. Requires both people's birth data.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | Yes | ||
| question | Yes | What the user wants to know about the relationship. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| lifeEvents | No | ||
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| targetDate | No | ||
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| partnerBirth | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so this is clearly a safe, non-mutating analysis. The description adds a minor behavioral constraint ('Requires both people's birth data') but no additional side-effect or runtime behavior disclosure is necessary.
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 one tightly scoped sentence that front-loads the trigger phrases, with no filler or repeated schema information. Every word contributes to routing the agent correctly.
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?
The tool has a complex nested schema with 8 parameters, and the description only covers identification and a high-level data requirement. It does not clarify how the agent should phrase or compose the question, whether missing birth info should trigger follow-up questions, or why some optional parameters matter. The output schema helps fill the return-value gap, but the overall guidance remains thin 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 description coverage is only 50%, and the description does little to compensate. It names the requirement for both birth datasets but adds no explanation of the question, lifeEvents, targetDate, detailLevel, or outputMode parameters. The schema does some of the work, but the description should surface more about the two required nested birth objects.
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 names precise trigger scenarios (궁합, 결혼 가능성, relationship compatibility) and the comparison of two birth charts, which clearly distinguishes this from single-person tools like legend_saju_read_fortune or legend_saju_analyze_name. The verb and resource are specific and recoverable from context.
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?
It explicitly says when to use the tool and even provides example Korean intent. The requirement that both birth datasets are needed is a useful precondition. However, it does not mention when not to use it or explicitly name alternative tools for relationship-related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_analyze_nameAnalyze a Korean nameARead-onlyInspect
Use this for 작명, 성명학, 81수, 이름 한자, 인명용 한자, 획수, or 파자 questions. It keeps legal Hanja observations, declared stroke standards, and birth-based naming guidance separate.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| birth | No | ||
| question | Yes | Name, Hanja, stroke-count, or naming question. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| givenStrokes | No | ||
| surnameStrokes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by stating a concrete behavioral contract: it keeps legal Hanja observations, declared stroke standards, and birth-name guidance separate. This is beyond the annotations and is useful for setting agent expectations about how the tool organizes its output.
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 the core usage instruction and then a precise behavioral note. Every sentence contributes meaning and there is 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?
Given the tool's complexity (nested name/birth objects and many optional parameters), the description provides the right high-level guidance without duplicating the schema. The output schema and numerous parameter descriptions cover invocation details, although the sparse coverage of some stroke parameters keeps this from a 5.
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 50%, so the description must compensate for undocumented parameters like givenStrokes and surnameStrokes. It does not mention any parameter names, types, or composition rules beyond general domain keywords. The schema itself carries most of the parameter burden, but half of the parameters remain not described.
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 names a specific verb ('Use this for') and lists concrete question types: 작명, 성명학, 81순, 이름 한자, 인명용 한자, 획수, and 파자. It also explains what the tool separates (legal Hanja observations, declared stroke standards, and birth-based naming guidance), making it clearly distinct from sibling tools like compatibility or fortune reading.
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 opening phrase 'Use this for' gives an explicit when-to-use instruction, and the listed Korean keywords define the exact domain. However, it does not explicitly say when not to use it or point to an alternative sibling, so it stops short of a full when-not/alternative guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_capabilitiesFind a calculation methodARead-onlyInspect
Use this when a user asks which Saju, Myeongri, Zi Wei, Qimen, Daliuren, I Ching, Tieban, Dang Saju, Tojeong, Feng Shui, naming, dream, or other traditional calculation method fits a specialized question. Do not use it for an ordinary fortune reading.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| systems | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| error | No | |
| query | No | |
| capabilityCount | No | |
| requestedCapabilityContract | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal a safe, read-only, non-destructive operation. The description adds scope context by separating specialized method selection from ordinary fortune reading, but it does not describe the actual operation, outputs, or any edge behavior beyond that.
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, each purposeful and immediately front-loaded with the trigger condition and a clear exclusion. The long list of domains is efficient because it defines the tool's full intended scope.
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 that the schema is simple, annotations cover safety, and an output schema exists, the description is mostly complete for an agent. The only real gap is the lack of direct parameter guidance, but the domain list and exclusion statement make the intended use sufficiently clear.
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 0% schema description coverage, the description needed to explain the parameters, and it partially does: the long list of system types hints at what the 'systems' parameter can contain and 'specialized question' hints at the query. However, it never mentions 'limit' nor explicitly maps the systems list to the schema property, so the compensation is incomplete.
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 states a clear action: find a calculation method that fits a specialized question, while enumerating the covered systems. It differentiates itself from ordinary fortune reading, which is enough to distinguish it from sibling tools like legend_saju_read_fortune.
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 this when a user asks which ... calculation method fits' and gives a when-not: 'Do not use it for an ordinary fortune reading.' This gives clear positive and negative selection criteria, even though it does not name the exact alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_cast_divinationCast a traditional divination chartARead-onlyInspect
Use this for 기문둔갑, 대육임, 주역, 점괘, or a concrete decision cast from a question time or six line values. Do not use it for a general natal fortune reading.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | No | Optional natal input when the requested method needs it. | |
| question | Yes | The concrete decision or divination question. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| lineValues | No | Six I Ching line values, bottom line first. | |
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| questionDateTime | No | Casting moment for Qimen, Daliuren, or Tieban question-time calculations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, so the description only needs to add behavioral context. It does that by specifying that the chart is cast from a question time or six line values and that it targets specific divination methods rather than general natal interpretation. This adds meaningful operational clarity beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler, placed at the start and front-loaded with the intended use case. The exclusion is stated directly and economically.
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?
The description, schema, and annotations together provide enough information for correct invocation. The main missing element is that for someone seeking a general natal reading, there is no explicit pointer to the appropriate sibling 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 description coverage is 100%, with rich per-property descriptions for questionDateTime, lineValues, birthTimeAccuracy, and others. The description reinforces the relevant inputs, such as 'a question time or six line values', but does not meaningfully add to what the schema already documents.
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 a specific action ('Cast') with a clear resource ('a traditional divination chart') and scope: 기문둔갑, 대육임, 주역, 점괘, or a concrete decision from a question time or six line values. It also directly distinguishes itself from general natal fortune reading.
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 explicitly says when to use the tool and gives a clear exclusion: 'Do not use it for a general natal fortune reading.' However, it does not name the alternative sibling tool that should be used instead for natal readings, so the routing is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_interpret_dreamInterpret a dream from audited traditionsARead-onlyInspect
Use this for 해몽, 꿈풀이, or dream interpretation. It currently handles five cross-culturally audited concepts and returns both shared motifs and conflicting conditions with primary-source excerpts; it does not turn the remaining raw corpus into invented meanings.
| Name | Required | Description | Default |
|---|---|---|---|
| dream | Yes | The dream narrative. Preserve the user's details instead of reducing it to one symbol. | |
| question | Yes | What the user wants to understand about the dream. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| dreamContext | No | Only context the user actually supplied, such as emotion, setting, relationships, work, or health. | |
| maxDreamMatches | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explains the scope: it handles five cross-culturally audited concepts and returns shared motifs plus conflicting conditions with primary-source excerpts. It also explicitly discloses a serious limitation—it does not turn the remaining raw corpus into invented meanings—which is valuable behavioral context for an agent.
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-loads the primary use case, and includes only high-signal constraints about scope and hallucination avoidance. Every sentence provides useful guidance, with no filler or 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?
Given the rich input schema, annotations, and output schema, the description is sufficiently complete. It tells the agent what the tool does, what it returns, and how far its coverage extends, and the parameter and output details are already handled by the structured 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 description coverage is high at 86%, and the schema already explains most parameters including dream, question, outputMode, detailLevel, and dreamContext. The description itself does not add parameter-level semantics, but it does not need to because the schema carries the load; only maxDreamMatches remains undocumented.
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 identifies the tool's purpose: interpreting dreams via Korean-specific terms (해몽, 꿈풀이) and English, and specifies the output type: shared motifs and conflicting conditions with primary-source excerpts. This distinguishes it from the sibling fortune, name analysis, and date-selection tools without ambiguity.
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 opens with 'Use this for 해몽, 꿈풀이, or dream interpretation,' giving explicit when-to-use guidance for the target scenario. It does not explicitly name alternative sibling tools or exclusion conditions, but the intended use case is clear enough for an agent to route dream-interpretation requests correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_manifestInspect Legend SajuARead-onlyInspect
Return the live, source-traceable deterministic engine manifest. No model or network call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| naming | No | |
| version | No | |
| knowledge | No | |
| sourceCount | No | |
| capabilities | No | |
| deterministic | No | |
| capabilityCount | No | |
| legacyIntentCount | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses meaningful behavioral details: it returns live state, is deterministic, source-traceable, and makes no model or network call. This gives an agent confidence that the operation is safe and side-effect-free without requiring structure inspection.
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 short sentences, each earning its place. The first fronts the primary function, and the second removes any concern about network or model latency, making the text both efficient and immediately useful.
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 a zero-parameter schema and an output schema present, very little needs to be stated. The description covers what the tool returns, the core property 'deterministic', and the safety guarantee 'no model or network call', which is sufficient for an agent to correctly select and invoke it.
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 tool has zero parameters and the schema coverage is 100%, so there is no parameter meaning for the description to add. The absence of parameters is already fully represented by the empty schema, and the description appropriately focuses on behavior instead.
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 a specific verb ('Return') and a specific resource ('deterministic engine manifest'), and adds clarity with 'live' and 'source-traceable'. This distinguishes it from the predictive/estimation flavors implied by sibling tools like legend_saju_read_fortune and legend_saju_analyze_compatibility.
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 model or network call' gives clear context that this is an inspection tool, not a generation or prediction tool. It implies when an agent should select it — to view the engine manifest rather than obtain a reading — but it does not explicitly name alternative tools or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_read_fortuneRead a Saju fortuneARead-onlyInspect
Use this when the user says 사주 봐줘, 운세 봐줘, 올해 운세, 재물운, 사업운, 직업운, 연애운, 결혼운, 건강운, 개운법, 구체적 액션, or asks what to do over a future period. Read structuredContent, especially recommendations for action requests. Use detailLevel=expert for a deep one-call analysis; do not search capability IDs first.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | Yes | ||
| asOfYear | No | ||
| question | Yes | The user's original request, such as 올해 재물운과 사업운을 봐줘. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| lifeEvents | No | ||
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| targetDate | No | The date whose current or future fortune is being read. Supply the current local date for requests such as 올해 운세 or 현재 운세. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| timelineRange | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral context by telling the agent to read structuredContent, look for recommendations, use a deep one-call expert mode, and not search capability IDs first. This goes beyond what annotations alone provide.
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 compact and front-loaded with trigger phrases, then moves directly into the most important behavioral guidance. Every sentence earns its place; there is no filler or repetitive schema restating.
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 nested schema, output schema, and annotations, the description covers the key call-shaping details: when to invoke, what to read from the result, which detailLevel to use, and the no-capability-search workflow. The remaining gap is that with eight sibling tools, an explicit line about which sibling is NOT appropriate would make the choice fully unambiguous.
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 56%, so a meaningful share of parameter behavior is already documented in the schema, e.g., hour ambiguity, calendar defaults, and birthTimeAccuracy. The description adds a useful directive for detailLevel=expert, but it does not meaningfully enrich other parameters like asOfYear, timelineRange, or lifeEvents.
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?
Title and trigger list make clear this reads a Saju/운세 fortune: it covers 사주 봐줘, 운세 봐줘, 재물운, 사업운, 연애운, etc. The description is specific about the resource and intent, but it never contrasts itself with the sibling tools, so the differentiation is implicit rather than explicit.
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 explicit triggering conditions with concrete Korean examples and adds workflow guidance like using detailLevel=expert for a deep one-call analysis. It does not give when-not-to-use guidance or name which sibling tool to choose instead, so it stops short of a full routing contract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_run_methodsRun specific or mixed traditional methodsARead-onlyInspect
Use this for expert, mixed-system, or named-method requests. It covers Myeongri details such as 십성·지장간·투간·통근·합충형파해·삼합·방합·육합·월령·격국·조후·억부·통관·병약·궁통보감·적천수·삼명통회·연해자평·종격·화격·특수격; Zi Wei 12궁·삼방사정·대한·유년·유월·유일·유시·생년사화·궁간사화·자화·비성·흠천사화·중주파; and Qimen, Daliuren, I Ching, Tieban, Dang Saju, Tojeong, Feng Shui, naming, 81-number, Hanja decomposition, and dream traditions. Pass discovered capability IDs together in requestedCapabilities, or let the server plan from the question. Use focused tools for ordinary single-goal requests.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Actual Korean name characters for the separate 9,495-entry official-name analysis path. | |
| birth | No | ||
| dream | No | Dream narrative for the source-bounded cross-cultural dream engine. | |
| purpose | No | ||
| asOfYear | No | ||
| question | Yes | Open-ended question. Built-in routing terms cover Korean plus common English, Chinese, and Japanese metaphysics vocabulary. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| rangeDays | No | ||
| lifeEvents | No | ||
| lineValues | No | ||
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| targetDate | No | Date or range anchor being analyzed. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. | |
| dreamContext | No | Optional emotion, setting, relationship, work, health, or other context explicitly supplied by the user. | |
| givenStrokes | No | ||
| partnerBirth | No | ||
| timelineRange | No | ||
| surnameStrokes | No | ||
| maxDreamMatches | No | ||
| questionDateTime | No | Moment a Qimen, Daliuren, or question-time calculation is cast. | |
| maxAutoCapabilities | No | ||
| requestedCapabilities | No | Optional runtime IDs from legend_saju_capabilities. This is intentionally not an enum. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is well covered outside the description. The description adds the useful behavioral note that the server can plan from the question when requestedCapabilities is empty, but it does not disclose other non-obvious behavior such as return shape or expert-mode composition, which are left to the output schema.
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 opening sentence is action-oriented and the long list of named traditions genuinely supports the tool's purpose. The description is dense and would be clearer with short groupings or bullets, but every sentence earns its place and the critical usage conditions are front-loaded.
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 complex 22-parameter tool, the description is unusually complete: it gives the capability scope, the trigger conditions, the difference from focused tools, and the two valid invocation styles. The output schema fills most remaining return-semantics gaps, and the required question parameter is minimal enough to call the tool safely.
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 only 45%, so the description must compensate for parameter meaning, but it fully explains only requestedCapabilities and vaguely references the question. It clarifies that capability IDs are optional and the server can infer from the question, which is useful given the 22 optional parameters, but most parameters still rely on their own schema 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 explicitly states 'Use this for expert, mixed-system, or named-method requests' and then enumerates the exact traditions covered, from Myeongri and Zi Wei to Qimen and dream traditions. It clearly identifies a concrete scope and distinguishes this broad tool from the focused sibling 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?
It gives explicit trigger conditions ('expert, mixed-system, or named-method requests'), explains the capability-ID path versus letting the server plan from the question, and says to use focused tools for ordinary single-goal requests. It does not name the focused sibling tools explicitly, which would make the routing guidance fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legend_saju_select_datesSelect auspicious datesARead-onlyInspect
Use this only when the user explicitly asks for 택일, 좋은 날, 계약일, 이사일, 개업일, 수술일, or another date-selection task. Do not use it merely because a fortune request mentions this year.
| Name | Required | Description | Default |
|---|---|---|---|
| birth | Yes | ||
| purpose | No | ||
| question | Yes | The event and constraints for choosing a date. | |
| maxClaims | No | Maximum interpretation points and raw claims returned outside debug mode. | |
| rangeDays | No | ||
| outputMode | No | Backward-compatible developer projection override. Ordinary callers should use detailLevel instead. | |
| targetDate | Yes | Start date for the candidate range. | |
| detailLevel | No | Preferred depth. brief is shortest, standard is the default readable answer, expert automatically composes question-relevant deep methods and evidence in one call, and raw is the complete developer record. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| claims | No | |
| routes | No | |
| blocked | No | |
| dossier | No | |
| sources | No | |
| evidence | No | |
| question | No | |
| sections | No | |
| timeline | No | |
| conflicts | No | |
| selection | No | |
| inputNotes | No | |
| detailLevel | No | |
| limitations | No | |
| nameAnalysis | No | |
| noModelCalls | No | |
| dreamAnalysis | No | |
| executionPlan | No | |
| methodAnalysis | No | |
| readingSummary | No | |
| recommendations | No | |
| calculationSummary | No | |
| omittedTimelineYears | No | |
| interpretationBoundary | No | |
| publicationSideEffects | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds context about the intended invocation trigger and avoids misapplication, but it does not disclose further behavioral details such as how candidate dates are returned or constrained beyond schema and output schema.
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 wasted filler, and the most decisive usage rule is stated up front. The Korean examples add practical precision without padding.
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 rich input schema, output schema, and safety annotations, the description provides the essential missing piece: when the tool should be selected and when it must not be. It is slightly thin on what the returned results represent, but the output schema mitigates that 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?
The description adds no parameter-level meaning; all parameter knowledge is carried by the schema, which covers 63% of parameters. Since the schema already documents some fields like calendar defaults, timezone handling, and hour ambiguity, a 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 defines the tool's scope: it is for date-selection tasks (택일, 좋은 날, 계약일, 이사일, 개업일, 수술일), not for ordinary fortune readings. This specificity distinguishes it from read_fortune and other fortune-related 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?
It gives explicit when-to-use criteria with concrete examples and a clear exclusion ('Do not use it merely because a fortune request mentions this year'). It does not name the alternative sibling tool to use instead, so it is slightly less helpful than it could be.
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.
10 tool updates
v0.4.0- Added
legend_saju_analyze_compatibility - Added
legend_saju_analyze_name - Changed
legend_saju_capabilities1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "capabilityCount": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "error": { + "type": "string" + }, + "hits": { + "items": {}, + "type": "array" + }, + "query": { + "type": "string" + }, + "requestedCapabilityContract": { + "type": "string" + } + }, + "type": "object" +}
- Added
legend_saju_cast_divination - Added
legend_saju_interpret_dream - Changed
legend_saju_manifest1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "capabilities": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "capabilityCount": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "deterministic": { + "type": "boolean" + }, + "error": { + "type": "string" + }, + "knowledge": {}, + "legacyIntentCount": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "naming": {}, + "publicationSideEffects": { + "type": "boolean" + }, + "sourceCount": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "version": { + "type": "string" + } + }, + "type": "object" +}
- Added
legend_saju_read_fortune - Removed
legend_saju_resolve - Added
legend_saju_run_methods - Added
legend_saju_select_dates
3 tool updates
v0.1.0- First observed
legend_saju_capabilities - First observed
legend_saju_manifest - First observed
legend_saju_resolve
TDQS
Scored across 9 tools
Each focused tool has a clear primary intent: fortune readings, compatibility checks, date selection, divination, name analysis, and dream interpretation. The only real ambiguity is among the metadata/router tools (manifest, capabilities, and run_methods), which can be confused when an agent needs to distinguish listing capabilities from executing a specialized method.
Seven of the nine tools follow a consistent verb_noun pattern: read_fortune, analyze_compatibility, select_dates, cast_divination, analyze_name, interpret_dream, and run_methods. The two noun-only names, manifest and capabilities, are a small deviation, but the shared legend_saju_ prefix keeps the overall naming recognizable.
Nine tools is well-scoped for a server with such a broad traditional-calculus surface. It provides one focused entry point per major user intent plus introspection and expert-runner tools, without turning the tool list into an overwhelming flat API.
The surface covers discovery, ordinary fortune reading, relationship compatibility, date selection, divination, naming, dream interpretation, and mixed expert methods. There is no obvious missed lifecycle step: about every major request route lands on a dedicated tool or the catch-all run_methods tool.
Maintenance
Related MCP Connectors
Deterministic BaZi and Chinese metaphysics tools for AI agents: charts, divination, almanac.
Free BaZi, I Ching, tarot, Zi Wei and bilingual learning tools with transparent methods. No API key.
Read-only Bazi, True Solar Time, and Chinese almanac tools in English and Traditional Chinese.
BaZi MCP gateway: 14 tools (6 fortune / 5 forum / 3 meta). API key required. Entertainment only.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Korean Saju (Four Pillars of Destiny) calculation and myeongni-hak glossary lookup via MCP, allowing AI clients to compute accurate saju analysis and look up fortune-telling terms.475 npmMIT
- AlicenseAqualityDmaintenanceProvides tools for Bazi (Chinese astrology) chart calculation and analysis, enabling LLMs to generate accurate birth charts, determine patterns, and answer follow-up questions based on actual calculations rather than model knowledge.2MIT

fatenava-mcpofficial
AlicenseAqualityCmaintenanceEnables AI agents to cast deterministic BaZi, Zi Wei Dou Shu, and Western astrology natal charts from birth details, with no setup or API key.168 npmMIT- AlicenseNot gradedqualityBmaintenanceProvides stateless tools for calculating BaZi charts, casting I Ching hexagrams, drawing tarot cards, and generating Zi Wei twelve-palace charts. Agents can call these tools without an account or model key and interpret the structured results with their own model.MIT