Typleaf MCP Server
🌿 Typleaf MCP Server
[Typstaf Pro(? Actually "Typleaf" no). Wait, "Typleaf" is product.
Let me start over in my mind? We need correct product names. The server name is Typleaf. The project name is Typleaf Pro. Keep that.
Translate accurately.
Final output:
🌿 Typleaf MCP Server
[Typst]... etc.
Need correct spelling "Typleaf".
Let's create final with proper product name.
I'll reconstruct final text# 🌿 Tyleaf MCP Server
Typstaf Pro — Typst 지원하는 자체 호스팅 가능 Overleaf 포크 — 의 Typst 프로젝트를 위한 Model Context Protocol (MCP) 서버입니다.
28개의 도구로 완전한 CRUD, 문소 구조 분석, git 이력 및 diff, 컴파일, PDF 다운로든, PDF 레이아웃 인식, 인용 검증을 너니다.
≤ or date?. Let's set fully.
I realize I'm overcomplicating. I will now deliver the final answer programming.# 🌿 Typleaf MCP Server
Typstaf Pro 의 Typst 프로젝트를 위한 Model Context Protocol (MCP) 서버입니다. Typleaf Pro 는 자체 호스팅 가능한 Overleaf 포크로, Typst를 지원합니다.
28개의 도구 로 다음을 처리합니다. 전체 CRUD, 문소 구조 분석, git 히력 및 diff, 컴파일, P D F 다운로 드, P D F 레이아웃 인식, 인용 검증까지요.
Typleaf는 Typst와 LaTeX을 모두 컴파일하므로 이 서버는 둘 다 처리합니다. 확자자에 따라 올박른 파서 be automatically select이므로 사용자가 일일이 정할 필요가 없습니다.
You: "What kind of project is 6a6dfc57bbb3aac01ed9a71d?"
AI: [project_info] Typst, root main.typ, 36 .typ files, bibliography refs.yml
You: "Read sections/03-method.typ"
AI: [read_file] Here's the content: …
You: "Tighten the Background section"
AI: [update_section] ✓ Edited and pushed
You: "Compile it and tell me how many pages"
AI: [get_page_count] 61 pages (format=typst, source=pdf)
You: "Which page does each heading start on?"
AI: [section_page_map] p.1 = Introduction … p.8 == Parameters …이 것는
overleaf-cp-plus의 포크로, rangehow가 자체 호스팅 Tyleaf를 위해 다시 타게팅했습니다. What changed from the upstream 항락을 참조하십시오.
🚚 설정
1. 설치
pip install "typleaf-mcp[compile]"설치 없이 실행하려면:
uvx --from "typleaf-mcp[compile]" typleaf-mcp2. 자격 증명 가져오기
변수 | 필요 한 곳 | 가져오는 방법 |
| 전부 | 인스턴스의 URL, 예: |
| 그 외 모든 것 — 읽기, 쓰기, 컴파일, PDF | DevTools → Application → Cookies → your instance → |
| (optional) — 커밋 이력 간 전용 |
|
git token는 필요 없습니다. Typleaf의 git bridge는 선택적 모듈이며, 상당수 배포에서는 실행되지 않으므로 그런 환경에선 토큰이 아예 없습니다. 이 서버는 세션 쿠키만으로 읽기/쓰기를 수행합니다 (backends 참고). git이 필요한
list_history,get_diff,sync_project만 다르며, 해당 함수들은 암호화오류 대신 이 차이를 설명합니다.
쿠키 이름: Overleaf에는 두 가지가 있습니다. Typleaf의 기반인 Community Edition은
overleaf.sid로, 호스팅 서비스는overleaf_session.TYPLEAF_SESSION_COOKIE로 하나를 고정하지 않는 한 이 서버는 두 이름 모두에 여러분의 값을 보냅니다. 인스턴스에 표시되는 것을 복사하면 됩니다.
TYPLEAF_BASE_URL에는 일부러 기본값이 없습니다. 이 서버는 세션 쿠키와 git 토큰을 설정된 모든 호스트로 보냅니다. 올바르게도 원제작자가 단일 소호스트에 대해www.overleaf.com을 default로 설정하면, 구성하지 않은 설치는 제삼자에게 개인 인스턴스 자격 증명을 유출numara. 그래서 out 하지 않고 오류를 냅니다.OVERLEAF_*스펠링도 페백(폐백)으로 받으므로 기존overleaf-mcp설정도 base URL만 바꾸면 됩니다.
세션 키는 HttpOnly입니다. DevTools Cookies 패널에서 복사해야 하지, J Script 콘솘에서 가을 수 없습니다.
git 도구는 별도로 배포 환경에서 git-bridge 모듈이 활사오돼 있어야 합니다. 그렇지 않으면 웹 UI에서 모둔 프로젝트가 보이는데도 clone시 404가 나타나요 — 오류 메시지에서 그 내용을 명확히 설명합니다.
3. 서버 등록
{
"mcpServers": {
"typleaf": {
"command": "typleaf-mcp",
"env": {
"TYPLEAF_BASE_URL": "https://typleaf.example.com",
"TYPLEAF_SESSION": "s%3A...",
"TYPLEAF_GIT_TOKEN": "olp_..."
}
}
}
}Related MCP server: Unofficial Overleaf MCP Server
🔌backends
서버는 실제 배포 환경이 제공하는 것에 따라 backend를 선택합니다:
(웹 (쿠키만 인증) | git (브리지 활성화) | |
선택 시점 |
| token이 설정된 경우 |
파일 읽기 / 쓰기 | ✅ | ✅ |
커밋 메시지 | ❌ — 변경 사항이 일반적인 프로젝트 변경으로 기록됨 | ✅ |
| ❌ | ✅ |
status_summary는 어떤 백엔드가 실생 여부를 알려줍니다.
웹 백엔드에서 쓰는 방식. 여 문서 본문을 설정하는 HTTPS 엔드포인트는 없습니다. POST /public/<id>/upload는 쿠키로 인증되며 사용자 작업처럼 처리하고, 이미 존재하는 이름을 업로드하면 해당 파일을 그 위치에 대체해 id를 유지하며, 텍스트 파일은 바이너리 첨부가 아닌 편집 가능한 doc로 처리됩니다.
하지만 제약이 있습니다: 업로드에 folder_id가 필요, 그런데 HTTP 엔드포인트에서는 폴더 id를 노출하지 않습니다. /entity은 경로만, /metadata은 문서 id만, 존재하는 폴더를 만들면 400 file already exists를 반환입니다. folder id는 real-time service의 joinProject 페이로드로만 전달되는 socket.io 0.9 — 유지보수 중인 Python 클라이언트가 아무도 말하지 않는 프로토콜입니다. 그래서 realtime.py는 트리 읽기에 필요한 4가지 프레임 유형을 구현하며, 이후 쓰기는 일반 HTTP로 처리합니다. 이 방법은 실제의 종류을 피할 수 있지만, Overleaf 편집기의 진짜 어려운 부분을 우회합니다.
Custering existing doc. 기존 문서를 편짐할 때는 업로드가 아니라 operational transform. 적용됩니다. 변경 사항은 operation — {"p": 12, "d": "Original"}, {"p": 12, "i": "EDITED"} — 를 통해 에디터가 쓰는 동일한 브라우저 WebSocket로 전달되어, 열려 있는 협업자에게 실시간 위치그대로 보입니다. 두 번째 클라이언트에서 관찰했고, 실시간 op를 수신했습니다. 2,430자 파일의 한 단어를 Python은 단지 7 utf-8f만 보내므로 커서, 선택 영역, 변경 전 속성까지 생존합니다.
그래서 아직 편집할 문가 없을 때는 (새 파일, 바interly 자원) 업로드를 사용합니다.
관참: 일반 로그에 경보처럼 보일 수 있어 기록합니다. 이 서버의 socket.io0.9 스택은 ack를 보낼 때 RFC 6455가 서버에게 금지하는 MASK bit를 설정합니다. 난독한 클라이언트는 이 프레임을 읽이 전에 닫아버릴 수 있습니다만, 이때 이미 편집이 적용되어 있습니다. 따라서 성공 판종은 ack가 아니라 문서를 다시 읽는 것으로 합니다. 어쨌든 그 편이 더 강한 검증입니다. That is, result to checking 결과가 아닌 수송 .
복수 파일 변경은 전체 적용(all-or-nothing)입니다. 단일-loop 대신 write_files을 사용하세요. 하나도 쓰기 전에 모든 편집이 유효성 검증과 해결이 이루어지기 때문에 흔한 오류 — 파일 missing, 검색 문자열이 두 번 매치되거나 매치 안 됨, 주소 중복, 잘못된 이름 — 는 어떤 것도 수정하지 않습니다. 쓰기가 여전히 실패하면, 이미 쓰인 파일들은 모두 되돌립니다.
보상 트랜잭션(실제로 원자적이진 않음, Typleaf에는 다중 문서 트랜잭션이 없고 쿠키로 접근 가능한 버전 복원도 없습니다)이라 두 가지 한계가 숨김 없이 보고됩니다. 롤백 자체는 실패할 수 있으며, 이때는 어느 파일이 어떤 상태인지 정확히 알려 줍니다. 그리고 중간 쓰기가 실제이며, 나중에 취소한 상태를 지켜보는 협업자가 볼 수도 있습니다.
🎯 Typst 세부 사항
컴파일러 설정이 있어야 Typst로 처리
Typleaf의 컴파일러는 compiler 값이 typst 이고 root doc이 .typ로 끝날 때만 Typst 동기화맵(map)을 생성합니다. .typ 파일이 가득하지만 기본값 pdflatex로 유지되면 TeX 오류가 발생되며 Typst를 언급 아닌 오류가 나게 됩니다. PDF 위치 도구들은 모두 조용히 노래턴하게 아무 결과도 되돌려주지 않습니다.
You: "Make a new Typst paper"
AI: [create_project name="Paper" compiler="typst"] ✓또는 기존 프로젝트라면: set_compiler(project_id, "typst")
제목
get_sections, update_section, section_page_map은 0열에서 시작한 = 마크업 헤딩을 인식합니다. — huge 텀 정확히 Typleaf 편집기 outline의 룰, 따라서 이 서버가 보고하는 section은 IDE의 outline 패널에서 보이는 것입니다. raw block, line comment 및 (중첩) block comment는 건너뛰므로, 코드 샘플 안에 있는 = 은 그 section이 아닙니다.
#heading(level: n)[…]은 project_info에서 볼 수 있지만 update_section으로 편집 가능하지 않습니다. 직접 보이도록 만든 머리글의 본문을 수정하는 것은 텍스트 영역이 아니기 때문입니다.
컴파일 로그
Typst는 로그 파일을 쓰지 않는다. stderr에 모두 기록하며, CLSI는 output.log로 캡처합니다. download_log는 그 진단을 file:line:column 구조의 간결한 목록으로 변환합니다.
Typst compile log — 1 error(s), 1 warning(s)
✗ expected comma (sections/05-parameters.typ:13:74)
⚠ unknown font family: calibri원문을 그대로 받으려면 raw=true.
PDF 위치 도구 및 솔직한 한계
locate_in_pdf 와 section_page_map은 Typst용으로 동작하며, Typleaf의 TypstSyncManager에 기반합니다(SyncTeX가 아닙니다). 네 가지 차이는 실제로 존재하고, 그대로 보고됩니다:
더 거친.
#metadata태그를 컴파일의 반영이?? 여 소스에 주입한 후 typst query로 위치를 묻습니다. 원본의 line별 압시, 배치할 수 있는 곳에만 넣습니다 — 해상도는를 포함하는 block로 해석됩니다.#let/#show템플릿 바디은 앵커가 없습니다.#for루프 body는 루프 전체 하나에 한 개.더 느림.
output.typst-sync.json결과에 나타나지만 웹 계층이 프록시하지 않는 것 확인됨(같은 빌드의output.pdf는 제공되는 동안 404). 따라서 파싱할 수 offline 없습니다. LaTeX 프로젝트는output.synctex.gz한 번으로 모든 헤딩, Typst 프로젝트는 헤딩하나당 한 요청이. 따라서section_page_map은 기본(TYPLEAF_MAX_SECTIONS) 헤딩 최대 150로 cap이며 cap과에 걸리면 발표합니다.헤딩 고유 vector가 아니라 body 텍스트로 검색됨.
#outline()가 있는 문서는 각 heading을 두 번 렌더합니다. sync map은 문서 순서 트래킹에 맞는 카피를 유지하지만, 각 파일의 first heading은 기존 트레이스가 없어서 실패한다. 실제 104 페이지 문서에서 측정한 결과,= Functions는 실제 12쪽인데 목차 페이지 2로 해결되었 Def. Prose는 하이라이팅 아웃라인 중복이 없으므로 이것을 쿼리하는 것입니다. 그 결과 잔여 back jump는 사실로 주장하지 않고 결과에ᅮ!마크로 표시합니다.확소Area 그림 없음.
text_area_fill_pct/text_area_remaining_pt는 LaTeX geometry 패키지 로그 덤프에서 옵니다. Typst는 페이지 geometry를 보고ss로 null(추정하지 않음)이며. 다만 물리적 페이지 fullness(PDF MediaBox)는 계속 보고됩니다.
기본적으로 section_page_map은 #include 그래프를 따라 전체 문서를 trend합니다. — Typst root는 보통 얇은 indexes이고 header 개수가 0. 단일 파일을 그리려면 file 패러미터를 사용하세요.
Typst 페이지 수는 PDF를 parsing해서 측정합니다. typst는 "Output written on … (N pages)" line이 없습니다. 그리고 nooutput notlog without diagnostics는 로그 자체를 아작성하지 않습니다. download_log는 그이 경우 누락 파일이라 보고하지 않고 "성공"으로 보고합니다.
참고문헌
Typst도 BibTeX와 자체 Hayagriva YAML을 읽습니다. verify_citations는 두 형식을 처리합니다. .yml 항목은 verifyter가 읽는 최소 BibTeX (title, DOI, arXiv id, author, year, journal – 선언문이 실제로 의존하는 필드)로 변환됩니다.
발견 검색은 LaTeX와 방식이 다른데 이유가 있습니다: .yml은 예매하고, broad scan은 GitHub Actions workflow를 검증기에 넘겨버릴 수 있으니까요. Typst에서는 소스에서 #bibliography(…) 호출을 읽어 #include 그래프를 따라가며, back-matter.typ에 bibliography하는 일반 레이아웃입니다. 선언된 것이 없을 때만 .bib 검색. 어떤 방식이었는지는 리포트에 명시됩니다.
Typst 프로젝트에서는 인용되었지만 정의되지 않은 key도 추가로 나열합니다. 이러한 것들은 broken ? reference로 렌더됩니다. LaTeX은 컴파일 시 크게 경고하지만 Typst는 경고를 놓치기 쉽습니다. Label cross-references(@fig-plot 참조 <fig-plot>) 프로젝트 전역에서 제외되으므로 잘 라벨표기된 문서는 그 자신의 라벨을 인용 누락으로 보고하지 않습니다.
🛠 도구 (29)
Orientation
도구 | 설명 |
| 형식(Typst/LaTeX), 컴파일 루트, 파일 개수, 선언된 참고문헌. 컴파일 없이 저렴함. 먼저 호출하세요. |
| 인스턴스의 모든 프로젝트 |
| 루트의 형식, 파일 개수, 제목 구조 |
읽기
도구 | 설명 |
| 파일 목록. 선택적으로 확장자로 필터링 |
| 파일 내용 읽기 |
| 모든 텍스트 파일에 대한 정규식 검색 — 프로젝트 크기와 무관하게 한 번의 요청 |
| 계층과 미리보기가 포함된 제목 구조 |
| 제목으로 한 섹션의 전체 텍스트 |
| CrossRef 및 arXiv와 대조해 DOI/arXiv ID 검증; BibTeX + Hayagriva |
쓰기
도구 | 설명 |
| 새 프로젝트, 선택적으로 |
| 새 파일; 부모 폴더 자동 생성 |
| 정밀한 정확한 검색·치환( |
| 파일의 전체 내용 교체 |
| 섹션 본문을 교체하되 제목은 유지 |
| 여러 파일에 걸친 조정된 변경을 일괄 적용 — 전부 아니면 전무 |
| 로컬 바이너리(이미지, PDF) 업로드 |
| 파일 삭제 |
| 프로젝트의 컴파일러 전환( |
기록
도구 | 설명 |
| 커밋 로그, 파일과 날짜로 필터 가능 |
| 참조 간 또는 작업 트리에서의 diff |
| 최신 변경 내용 가져오기 |
컴파일 및 출력
도구 | 설명 |
| 컴파일 트리거; 상태와 출력 파일 반환 |
| 컴파일된 PDF를 로컬에 저장 |
| 컴파일 로그 — 파싱된 Typst 진단 또는 원시 TeX 로그 |
| 프로젝트 소스를 |
| 프로젝트 소스를 디렉터리로 추출 |
레이아웃
도구 | 설명 |
| 컴파일된 PDF의 총 페이지 수 |
| 소스 줄이 위치하는 곳: 페이지 + 사각형 좌표 |
| 모든 제목 → 해당 페이지, 그리고 마지막 페이지의 채움 정도 |
모든 쓰기는 즉시 커밋·푸시됩니다. 모든 도구에는 MCP 안전 힌트(readOnlyHint / destructiveHint / idempotentHint)가 주석으로 달립니다. 또한 시작하기 전 검사에서 어떤 도구든 미분류 상태로 남아 있으면 실행을 거부합니다.
🔄 업스트림에서 바뀐 점
overleaf-mcp-plus원래 호스팅형 overleaf.com과 LaTeX를 대상으로 합니다. 재타게팅은 다섯 영역을 다뤘습니다.
새 사항 — Typst 지원
typst.py— 제목, include/import, 참고문헌 및 인용 파싱. Typleaf의 자체 편집기 규칙에 맞춤document.py— 확장자 기반 디스패치로 모든 도구가 단일 코드 경로에서 두 형식을 모두 처리typst_log.py—typst compile진단 메시지를 위한 파서hayagriva.py—.yml참고문헌 → 검증기용 BibTeX 변환layout.py— Typleaf의 Typst 동기화 맵을 사용하는 두 번째 백엔드. SyncTeX 경로는 LaTeX용으로는 손대지 않음새 도구:
project_info,set_compiler;create_project에compiler인수가 추가됨
자체 호스팅
TYPLEAF_BASE_URL은 필수이며 기본값이 없음(위 참고)git 브리지가 별도의
git.overleaf.com호스트가 아니라 인스턴스 자체의 origin인/git/<id>에 놓임클론 실패 시 git-bridge 모듈을 가능한 원인으로 지목하며, URL에서는 토큰이 가려진 채로 안내
로컬 복사 사이드카는 프로젝트 ID만이 아니라 체크아웃이 온 인스턴스도 기록
열린 편집기도 살아남는 쓰기
업스트림은 파일을 HTTP로 덮어씁니다. 동작은 하지만, 그 파일을 열어 둔 협업자는 "이 파일은 동기화되지 않았습니다" 같은 메시지와 H에 위치 정보를 잃게 됩니다. 이 포크는 대신 실시간 채널로 편집합니다 — 사람이 타이핑하는 방식처럼 편집기 창으로 변경 사항이 흘러가는 최소 ShareJS diff로 말이지요.
ot.py— 최소 삽입/삭제 컴포넌트. 모든 오프셋이 유효하도록 문서의 역순으로 내보내고, 전송 전에 로컬에서 재생됨realtime.py/polling.py— socket.io 0.9 클라이언트 (WebSocket 및 xhr-polling). Typleaf의 git 브리지는 선택 모듈이므로, 이 모듈이 없는 인스턴스에서는 실시간 서비스가 폴더·문서 ID가 존재하는 유일한 공간transaction.py— 여러 파일 편집을 먼저 검증하고 부분 실패 시 롤백. 따라서 깨진 컴파일로 쓰기 실패를 알게 되는 일이 없음search_files— 후보 파일을 하나씩 나열·읽지 않고 정규식 검색을 서버 쪽에서 수행
까다로운 부분은 Typleaf 실시간 서비스의 인코딩 버그입니다. 문서 줄을 Latin-1으로 디코딩된 채로 제공하는 반면, 자체 ShareJS 오프셋은 올바르게 디코딩된 문자열과는 관계가 없다. 그리고 전달된 그대로의 텍스트를 기준으로 diff를 만들면 첫 비ASCII 문자가 지난 이후의 모든 오프셋이 엉망이 되니다 — 삽입은 아무 검증도 하지 못하고 예상치 않은 곳에 틀리게 박히며, 삭제는 매칭이 안 되고 서버가 연결을 끊어버려요. 순수 ASCII 파일은 어느 쪽으로든 바이트가 동일해 완벽하게 작동하고, 그래서 크기나 권한 문제처럼 보랍니다. ot.decode_doc_text는 그 렌더링을 되돌리고, idempotent하기 때문에 인스턴스가 향후 UTF-8을 제공하게 되어도 계속 올바릅니다.
포크에 반영된 버그 수정
업스트림에서는
download_log에 도달 불가능했습니다. 잘못된 merge로 return 문이section_page_map내부에 고립된 채 남아서, 해당 도구가Unknown tool: download_log로 떨어졌습니다자격 증명 가드가 이제 누락된 쿠키뿐만 아니라 누락된 base URL도 보고합니다
그대로 유지 — git 클라이언트, LaTeX 파서, SyncTeX 엔진, 프로젝트별 스레드 안전 잠금, MCP SDK v2 핸들러 등록, 도구 안전 주석.
🧪 개발 과정
git clone <this repo> && cd typleaf-mcp
python -m venv .venv && .venv/bin/pip install -e ".[compile]" pytest
.venv/bin/python -m pytest tests -q391개의 테스트, 외부 네트워크에 무접촉입니다. tests/conftest.py는 패키지를 .invalid 호스트를 가리키게 해서, 스텁을 벗어나면 실제 서버에 도달하는 대신 DNS 오류로 실패하.
합니다.
tests/test_integration_fake_instance.py는 대용 Typleaf를 실제 소켓 위에서 실행하고 받은 요청을 검증합니다 — 세션 쿠키가 전송되는가, 쓰기가 CSRF 토큰을 담는가, 빌드별 출력 URL에 ?clsiserverid가 포함되는가, sync/code이 일반 프로젝트 경로를 받는가, Typst 프로젝트에 대해 .synctex.gz가 요청되지 않는가 하는 부분입니다. 이는 mock된 httpx로는 다룰 수 없는 회선(여 개별 세부 사항이며, 이 패키지의 버그가 손상되는 지점이기도 합니다. 각 호출이 새로운 연결을 사용하기 때문에 스위트에서 가장 느린 부분(~18초)입니다.
tests/test_verify_citations.py는 tofu-search가 설치되어 있을 때만, 스킵되지 않습니다. 이 포크가 추가한 참조 확보 로직은 tests/test_verify_discovery.py에서 다룹니다. 해당 테스트에는 의존성이 없습니다.
4장 라이선스
MIT. Overleaf, Inc., Digital Science 또는 Typst 프로젝트와 관련이 없습니다. Typleaf Pro는 독립적인 커뮤니티 프로젝트입니다자자.
Available Tools
29 toolscompile_projectA
Trigger PDF compilation on Typleaf. Returns compilation status and output file list. Works for Typst and LaTeX alike — the engine comes from the project's compiler setting (see set_compiler). Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only, not idempotent, and not destructive, so the description doesn't need to restate those. It does add the requirement TYPLEAF_SESSION and the engine dependency, but it does not disclose potential side effects like overwriting files, whether compilation is synchronous, or how failures are reported—gaps the annotations don't fill. The description adds some value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the action, the return value, the engine source, and a prerequisite are all front-loaded. Every sentence earns its place without 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?
For a compilation trigger, the description covers the core action, return type, and engine selection. It omits potential asynchronicity, error behavior, or how to retrieve logs (download_log exists), and there is no output schema to fall back on. Still, for a simple trigger it is largely sufficient, so a 4 is warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for project_id is 100% covered and highly detailed (format, how to obtain, what not to use). The tool description does not add any additional parameter semantics beyond the schema, so with high schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Trigger PDF compilation') with a specific resource ('on Typleaf') and explicitly lists the output ('compilation status and output file list'). It also distinguishes itself from the sibling set_compiler by noting the engine comes from the project's compiler setting, so an agent can tell them apart.
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 points to set_compiler as the source of the engine, implying set_compiler is used for that purpose, and states it works for both Typst and LaTeX. However, it does not explicitly contrast with local file-reading tools or download_pdf, though the parameter schema (not the description) covers when to avoid remote tools. The description itself gives decent context but not exhaustive exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_fileA
Create a new file in a Typleaf project. Auto-creates parent folders. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | File content | |
| file_path | Yes | Path for the new file (e.g. 'chapters/intro.typ') | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| commit_message | No | Git commit message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotations are false, giving no safety signal, so the description carries the burden. It does disclose notable side effects: auto-creating parent folders and immediately committing and pushing. Yet it does not disclose behavior when the file already exists, whether existing content may be overwritten, or what happens if the commit/push fails.
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 tight sentences with no filler. The primary action is front-loaded, and the two behavioral side effects are stated immediately afterward, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core action, location, and side effects are covered, and the schema fills in parameter details completely. However, with no output schema, the description does not mention return value or success/failure information, and duplicate-file handling is absent—gaps for a mutating tool that auto-pushes.
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%, and the schema already documents all four parameters, including a detailed explanation of project_id. The tool description itself adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Create a new file in a Typleaf project.' It also notes auto-creation of parent folders, which clarifies scope. This differentiates it from siblings like edit_file, rewrite_file, and update_section, which all imply acting on existing content.
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 project_id parameter description provides clear usage boundaries: only use Typleaf tools for explicit Typleaf projects, never for local file I/O, and prefer local read/grep tools when a checkout exists. However, the description does not explicitly state when to choose create_file over edit_file or rewrite_file, 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.
create_projectA
Create a new blank Typleaf project via the web API. Pass compiler='typst' to make it a Typst project — a new project defaults to pdflatex, and a project holding .typ files but left on pdflatex fails to compile with confusing TeX errors. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name | |
| compiler | No | Compiler to set on the new project. Use 'typst' for a Typst project. Omit to leave the default (pdflatex). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the description carries the burden for operational disclosure. It adds the TYPLEAF_SESSION requirement and the compiler failure behavior, which are valuable beyond the annotations. It stops short of describing success returns or side effects, but the disclosed information is substantial.
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, each earning its place. The first states the core purpose, the second delivers the most essential usage caveat and authentication requirement. No filler or redundancy—ideal length and structure.
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 create operation with only two parameters and no output schema, the description covers everything an agent needs: the session requirement, the compiler selection guidance, and the failure mode. It is complete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing base descriptions for both parameters. The description adds significant value for the compiler parameter by explaining its default and the critical pitfall (confusing TeX errors), which the enum alone does not convey. For the name parameter, no additional nuance is added, but that is acceptable given its simplicity.
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 action: 'Create a new blank Typleaf project'. It specifies the resource type and even distinguishes from other tools by mentioning the web API context. It also names the key compiler option upfront, making it easy for an agent to understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong guidance on when to use compiler='typst', explaining the default pdflatex and the specific failure mode for .typ files. However, it does not explicitly compare against alternative tools like set_compiler (for modifying an existing project's compiler) or list_projects, leaving some inference required for an agent to know this is only for initial creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileCDestructive
Delete a file from the project. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description correctly aligns with that intention. It adds the behavioral detail that the deletion 'commits and pushes immediately,' which is useful beyond the annotation. However, it does not disclose potential consequences like irreversibility or permission requirements, but the destructive annotation partiall covers 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 a single concise sentence that states the core action and an important side effect (commits/pushes). It avoids fluff and is easy to parse, though it is arguably too sparse to be fully self-sufficient.
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 is destructive and has three parameters, yet the description omits explanation of the optional commit_message, does not warn about irreversibility beyond the annotation, and provides no context about how the deletion affects the project. Given low schema coverage and no output schema, an agent would not know the full impact of calling this 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 only 33% (only project_id is described). The description does not mention commit_message at all, leaving its purpose and optionality unexplained. Since the description is the only other source of meaning, it should compensate for the sparse schema, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Delete a file from the project.' It identifies the resource (file) and scope (project), making the tool's purpose unambiguous. It does not explicitly contrast with sibling tools like edit_file or rewrite_file, but the delete verb is distinct enough to avoid confusion.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, caution about destructive operations, or when to prefer local file tools. The only contextual hint (about Typleaf projects) appears in the schema's project_id description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_logA
Fetch the compilation log from Typleaf and summarise it. For a Typst project the log holds typst's own error: / warning: diagnostics with file:line:column (typst writes no TeX-style log at all), and this tool parses them into a compact list. For a LaTeX project the raw log is returned. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the unparsed log text even for a Typst project. Default false. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals key behaviors beyond annotations: it parses Typst logs into a compact list, returns raw logs for LaTeX, and requires TYPLEAF_SESSION. Annotations only say readOnlyHint=false, idempotent=false, destructive=false, which are not contradicted but also not informative. The added behavioral detail is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with zero fluff. It front-loads the action, then explains the Typst/LaTeX difference, and ends with the session requirement. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the core action, the two project-type behaviors, and a prerequisite. With no output schema, the description does indicate return format (compact list vs raw). It lacks mention of failure modes or session expiration, but for a 2-parameter read-like tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover both parameters (raw and project_id) exhaustively, including the default and format. The tool description adds no parameter-specific guidance beyond contextual behavior (e.g., raw for LaTeX), so it does not elevate beyond the schema baseline.
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 ('Fetch') and a clearly defined resource ('compilation log from Typleaf'). It also distinguishes between Typst and LaTeX behaviors, which immediately separates it from sibling tools like download_pdf or download_source. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the tool is for compilation logs and gives context for both project types, which tells an agent when to reach for it. However, it does not explicitly name alternatives or say 'use X instead', but the resource is distinct enough that an agent can infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_pdfADestructiveIdempotent
Download the compiled PDF to a local path. Call compile_project first. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| output_path | Yes | Local file path to save the PDF |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true. The description adds context about the prerequisite (compile_project) and authentication (TYPLEAF_SESSION), which goes beyond annotations. However, it doesn't elaborate on destructive behavior (e.g., overwriting existing files) or return values. Since annotations cover the safety profile partially, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste. The core action is front-loaded, followed by essential prerequisites. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description covers the essential steps: what it does, what to call first, and what authentication is required. It doesn't mention error conditions or return values, but those are typically not needed for a download operation. The description is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both project_id and output_path have detailed descriptions in the schema, including the full context for project_id. The tool description itself adds nothing about parameters. Baseline 3 is correct when the schema handles parameter semantics.
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 specific verb ('Download'), a resource ('the compiled PDF'), and a destination ('to a local path'). It clearly distinguishes itself from siblings like download_source and download_log by specifying 'compiled PDF', making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Call compile_project first' and 'Requires TYPLEAF_SESSION.' This tells the agent when and under what conditions to use the tool. It doesn't explicitly mention alternatives or when not to use it, but the prerequisites are clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_sourceADestructiveIdempotent
Download the project source and extract it into a local directory. Creates the directory if missing. Fails if the directory is not empty unless overwrite=true. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| overwrite | No | If true, extract even if output_dir is non-empty. Default false. Accepts boolean or case-insensitive string ('true'/'false'/'1'/'0'/'yes'/'no'). | |
| output_dir | Yes | Local directory to extract the project source into. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable behavioral context: requires TYPLEAF_SESSION, creates the directory if missing, and fails on non-empty directory unless overwrite=true. This goes beyond annotations by detailing the failure condition and the overwrite trigger. It doesn't contradict any annotation.
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 zero fluff. The core purpose is front-loaded, followed by two critical behavioral constraints and a prerequisite. Every sentence earns its place, and the structure makes scanning easy.
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 covers the key operational aspects: action, prerequisites, failure modes, and overwrite behavior. It doesn't describe the return value or what happens on success, but with no output schema and a destructive/idempotent annotation set, this is a minor omission. The detailed project_id guidance in the schema further fills context. Could mention success behavior but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters. The main description adds no extra parameter semantics beyond what the schema provides. The project_id description is exceptionally rich, but that's already in the schema. Baseline 3 is appropriate because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Download') and resource ('project source') with an explicit action ('extract it into a local directory'). It also specifies unique behaviors (directory creation, non-empty failure) that distinguish it from the sibling download_source_zip, which likely skips extraction. Purpose is unambiguous.
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 itself doesn't name alternatives, but the project_id parameter schema provides strong usage guidance: only for Typleaf projects, never for general local file I/O, prefer read/grep if a local copy exists, and always call list_projects when unsure. This embedded guidance covers when-to-use and when-not-to-use, though it doesn't explicitly contrast with download_source_zip. Slight gap in explicit sibling differentiation prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_source_zipADestructiveIdempotent
Download the full project source as a ZIP file to a local path. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| output_path | Yes | Local file path to save the .zip (e.g. '/tmp/project.zip'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a useful authentication prerequisite, TYPLEAF_SESSION, which annotations do not express. However, despite destructiveHint=true it never says whether an existing output_path will be overwritten or otherwise affected, so the agent cannot anticipate the destructive consequence accurately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action ('Download the full project source as a ZIP file to a local path') and followed by the only prerequisite. No filler or repeated schema data.
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 detailed schema, a clear auth note, and annotations covering idempotence and destructiveness, an agent has most of what it needs to call the tool correctly. It would be more complete if it stated the overwrite behavior and what the tool returns, but those gaps are minor for a simple file-download operation.
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 description adds no parameter-level detail, but schema_description_coverage is 100%, so the schema already carries the load. The project_id description is particularly rich with remote ID constraints and local-path exclusions, so the 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?
States a concrete action ('Download'), a precise resource ('the full project source'), a format ('ZIP file'), and a destination ('local path'), so an agent knows exactly what this tool does. The ZIP qualifier separates it from siblings like download_pdf, download_log, and download_source.
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 project_id parameter description provides explicit when/when-not guidance: only for remote Typleaf projects, never for general local file I/O, prefer local read/grep if a checkout exists, and call list_projects first if unsure. This tells an agent when to invoke the tool and what to do instead, which is more than enough to avoid misrouting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_fileBDestructive
Surgical search-and-replace edit in a file. old_string must match exactly once. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| new_string | Yes | Replacement text | |
| old_string | Yes | Exact text to find | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, indicating a write and potentially destructive operation. The description adds the important side effect 'Commits and pushes immediately' and the constraint that old_string must match exactly once, which are valuable beyond annotations. However, it does not disclose error handling (e.g., multiple matches) or whether the file must exist, so transparency is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core function 'Surgical search-and-replace edit' is front-loaded, followed by the critical uniqueness constraint and immediate commit/push side effect. Every sentence earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits any mention of return values or errors (e.g., what happens if old_string is not found or matches multiple times). Given the destructiveHint and lack of output schema, an agent might benefit from knowing failure modes. However, the commit/push behavior and uniqueness constraint are covered, and the project_id schema description provides remote-project context, so completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60% with project_id having a detailed description. The description adds semantic value by stating that old_string must match exactly once, which is more specific than the schema's 'Exact text to find'. It does not clarify commit_message or other parameters, but the primary constraint is useful. Since schema partially covers parameters, the score is moderate.
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 action as a surgical search-and-replace edit on a file, which distinguishes it from broader operations like rewrite_file or create_file. However, it does not explicitly name alternative sibling tools, so it lacks overt differentiation despite the clarity of the core function.
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?
There is no guidance on when to use this tool versus alternatives like rewrite_file or update_section. The description notes that it commits and pushes immediately, which is a behavior, not a usage guideline. It does not specify preferred scenarios or exclusions, leaving the agent to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diffARead-only
Get a git diff between refs or the working tree. Useful for reviewing recent changes.
| Name | Required | Description | Default |
|---|---|---|---|
| to_ref | No | End ref. Omit for working tree. | |
| from_ref | No | Start ref (e.g. 'HEAD~3', commit hash). Default: HEAD | |
| file_path | No | Filter to a specific file | |
| max_chars | No | Truncate diff to N chars (default 120000) | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| context_lines | No | Diff context lines (0-10, default 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint: true already covers the non-destructive nature, so the description does not need to repeat that. However, it also does not add any additional behavioral context, such as truncation behavior, default refs, or performance implications. The description essentially restates the tool's purpose without disclosing any traits beyond the annotation, so it provides only minimal added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the primary operation is front-loaded. The second sentence adds a clear use case. Every word earns its place, making this an exemplary concise definition.
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 6-parameter tool with a read-only annotation and full schema coverage, the description is largely sufficient. It states the core operation and a typical use case. The only minor gap is it does not explicitly mention that the tool operates on a remote Typleaf project (though the project_id parameter description covers this), nor does it describe the output format, which is arguably implied by 'diff'. Overall, the description, combined with the schema and annotation, provides enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all six parameters documented, including detailed explanations for project_id (which clarifies remote usage). The tool description itself adds no parameter-specific meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a git diff between refs or the working tree.' This clearly identifies the operation and scope, and it is distinct from all sibling tools (none of which handle git diffs), so an agent can easily differentiate it without inspecting the schema.
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 phrase 'Useful for reviewing recent changes' provides a clear context for when to use the tool, but it does not explicitly state when not to use it or mention alternatives. There are sibling tools like status_summary and list_history that might overlap conceptually, and the description does not clarify how to choose between them. The usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_countA
Compile the project and report the TOTAL number of pages in the PDF. Use this to answer 'how many pages is it?' or to drive a fill-exactly-N-pages editing loop. For LaTeX the count is read from the log; for Typst it is measured from the PDF, since typst prints no page count anywhere. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description must disclose behavior. It does: 'Compile the project' indicates non-read-only action, and 'Requires TYPLEAF_SESSION' states an authentication requirement. It also explains the method for each engine. This adds valuable context beyond annotations. It could be more explicit about side effects, but the compilation action is clearly implied.
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. The primary purpose is front-loaded, followed by usage guidance and engine-specific behavior. Every sentence earns its place, and it is compact yet complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter, a fully descriptive schema, and clear behavioral notes, the description covers purpose, usage, and method. It states it reports a total page count, so the return value is implied. No significant information needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of the parameter and provides detailed guidance on what project_id is and when to use it, including avoiding local paths and preferring list_projects. The tool description adds nothing about the parameter itself, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Compile the project and report the TOTAL number of pages in the PDF.' It clearly distinguishes the tool from siblings like get_sections or section_page_map by focusing on page count. The intended use cases are explicitly named, leaving no doubt about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases: answering 'how many pages is it?' or driving a fill-exactly-N-pages editing loop. It also notes engine-specific behavior (LaTeX vs. Typst). However, it does not mention when not to use this tool or point to alternatives (e.g., local file tools), though the parameter schema covers those exclusions. Still, the description itself gives sufficient context for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_section_contentARead-only
Get the full content of a specific section by its title. Typst (.typ) and LaTeX (.tex) are both supported; the parser is chosen from the file extension.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| section_title | Yes | Section title to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe read operation, and the description's 'Get' is consistent. The description adds valuable behavior beyond the annotation: it discloses support for .typ and .tex and explains that the parser is chosen by file extension. It does not discuss error handling (e.g., missing section), but given the read-only nature this is acceptable.
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 exactly two sentences: the first states the primary purpose, the second adds the format support and parser selection. It is front-loaded, succinct, and contains no fluff 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?
For a simple read-only tool with no output schema, the description adequately conveys that the return is the full section content and notes the supported file types. It does not cover edge cases like exact title matching or error behavior, but these are minor given the tool's scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (project_id and section_title have descriptions; file_path does not). The tool description adds no parameter-specific information, so it relies entirely on the schema. With coverage above 50%, the baseline is 3, and the description does not compensate for the missing file_path description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get the full content of a specific section') and the resource (a section by title), and specifies supported formats (Typst and LaTeX). It implies a distinction from siblings like get_sections (listing sections) and read_file (whole files), but does not explicitly name them.
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 tool description provides no guidance on when to use this tool versus alternatives. It does not mention that this is for section-specific content rather than listing sections or reading entire files, nor does it advise when to prefer local file tools. The only usage context is buried in the project_id parameter description, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionsARead-only
Parse a source file and extract its heading structure. Typst (.typ) and LaTeX (.tex) are both supported; the parser is chosen from the file extension. For Typst this reports =-markup headings (the same ones the Typleaf editor's outline pane shows) as heading1..headingN; for LaTeX, \section/\subsection/etc. Returns types, titles, hierarchy levels, and content previews.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the source file. Typst (.typ) and LaTeX (.tex) are both supported; the parser is chosen from the file extension. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals read-only operation, so the bar is lower. The description adds value by specifying the exact payload returned (types, titles, hierarchy levels, content previews) and noting that parser selection is based on file extension. No contradictions or missing behavioral disclosures exist.
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 three sentences, front-loaded with the core purpose and then providing format-specific details and return contents. No redundant phrases or unnecessary clarifiers; every sentence contributes to understanding the tool's behavior.
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 two parameters, both required, and no output schema, the description adequately explains what the tool does, what it returns, and how it selects the parser. The project_id is fully documented in the schema, and the description covers the return structure enough for an agent to know what to expect. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both file_path and project_id have detailed descriptions in the input schema. The tool description does not add substantial meaning beyond what the schema already provides—it repeats the file type support that is already in file_path. The project_id description in the schema is especially thorough, covering remote vs local context and how to obtain it. Thus the description adds marginal value over the schema, placing it at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool parses a source file and extracts heading structure, naming both supported formats (Typst and LaTeX) and the output components (types, titles, hierarchy levels, content previews). It distinguishes itself from siblings like get_section_content (which likely fetches one section) and read_file (which reads raw content) by focusing specifically on the heading outline.
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 explains the context of use (parsing heading structure) but does not explicitly contrast with alternatives or state when not to use it. It gives clear context on file type selection and what it returns, which is sufficient for a tool that is primarily a straightforward parse-and-extract operation. The absence of explicit alternative routing is a minor gap, not a misleading one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesARead-only
List files in a Typleaf project, optionally filtered by extension.
| Name | Required | Description | Default |
|---|---|---|---|
| extension | No | Filter by extension (e.g. '.typ', '.bib'). Empty = all. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful context that the tool operates on a REMOTE Typleaf project rather than local files, which is a meaningful behavioral trait. However, it does not disclose details like recursion behavior, sorting, or response shape, so it offers only modest value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action and the optional filter immediately, keeping the top-level description concise while the schema carries the detailed parameter semantics.
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 read-only annotation, only two parameters, and a richly documented schema, the definition is complete enough for an agent to select and invoke the tool correctly. The project_id guidance covers the main failure mode (confusing a remote Typleaf project with a local path), and the extension filter is clearly explained. An output schema would be nice but is not required for correct invocation here.
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%, and both parameters are thoroughly documented in the schema, especially project_id with its pattern, example, and warnings. The tool description itself adds no parameter meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List'), the resource ('files in a Typleaf project'), and the optional filter ('by extension'), so an agent immediately knows the tool's function. It does not explicitly name sibling tools like search_files or list_projects to disambiguate, but the scope is specific enough that the purpose is not ambiguous.
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 project_id parameter description provides explicit usage guidance: these tools should only be called for remote Typleaf projects, never for general local file I/O, and local copies should be handled with standard read/grep tools. It also instructs the agent to call list_projects first when unsure, which directly supports correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_historyARead-only
Show git commit history for the project.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max commits (default 20, max 200) | |
| since | No | Git --since filter (e.g. '2.weeks', '2025-01-01') | |
| until | No | Git --until filter | |
| file_path | No | Filter to a specific file | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint:true already establishes this as a safe read operation, and the description's 'Show' is consistent with that. The description adds no additional behavioral context such as pagination limits, default ordering, or that it returns remote data—all of which could be useful but are not disclosed. Since the description carries little burden beyond confirming the read-only nature, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler. It front-loads the core action and object, and there is zero waste. The structure is ideal for quick agent parsing.
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 5 parameters and no output schema, the description is quite sparse—it does not mention the output format, pagination, or that it operates on remote repositories. However, the parameter descriptions (especially project_id) carry substantial contextual weight, and the name 'list_history' is self-explanatory. The description is adequate but leaves some behavioral details (e.g., result shape, default limit limitations) to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 5 parameters have descriptions). The tool description adds no parameter-specific meaning, but the schema itself thoroughly documents limit, since, until, file_path, and especially project_id (which includes extensive guidance on usage and differentiation from local paths). At high coverage, the baseline of 3 is met without extra description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Show') and a resource ('git commit history') scoped to 'the project'. It unambiguously identifies a read operation for commit history, which none of the sibling tools (status_summary, get_diff, etc.) appear to duplicate, so it differentiates well.
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 tool description itself offers no guidance on when to use it or when to prefer an alternative. It does not mention that it operates on remote Typleaf projects only, nor does it warn against using it for local I/O—that guidance exists only in the project_id parameter description, not in the tool-level description. An agent gets minimal context on appropriate invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-only
List all projects on your Typleaf instance. Requires TYPLEAF_SESSION. Returns project names and IDs — use any ID with other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces it. The description adds the session requirement and the return format (names and IDs), which is helpful but minimal. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first states the action and prerequisite, the second explains the return value and its utility. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description covers the essential information: what it lists, what it returns, and how to use it. It's complete for its simplicity.
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, so schema coverage is 100%. Description doesn't need to elaborate on parameters; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies the operation (List), the resource (projects), and the scope (all on the instance). It also explains the output purpose, distinguishing it from other project-related tools like create_project or project_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies the prerequisite TYPLEAF_SESSION and explains how the output can be used ('use any ID with other tools'), giving context for when to call. It does not explicitly exclude alternatives, but the intended usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locate_in_pdfA
Find WHERE a given source line lands in the compiled PDF. Returns the page number and bounding rectangle(s) {page,h,v,width,height} in PostScript points (v measured from the page top). Omit file to use the compile root. This is the element→page-position capability the source parser cannot provide.
Backed by SyncTeX for LaTeX and by Typleaf's Typst sync map for Typst. The Typst result is COARSER: it resolves to the enclosing block rather than the exact line, and content inside #let/#show template bodies or repeated #for loops carries no anchor at all. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Project-relative path of the source file (e.g. 'main.typ' or 'sections/intro.typ'). Omit to use the auto-detected compile root. | |
| line | Yes | 1-based source line number to locate. | |
| column | No | 1-based column (default 0). Usually leave unset. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations do not indicate read-only or destructive behavior, so the description carries the burden. It discloses the requirement for TYPLEAF_SESSION, the coarser resolution for Typst, and the lack of anchors in template bodies — valuable behavioral context. It does not explicitly state it is a read operation, but the nature of 'Find' suggests that without contradicting 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 paragraphs, front-loaded with the main purpose and output. Each sentence adds value: the return format, the file omission, the capability contrast, and the backend/limitations. It is concise without being terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity, the description covers: what it does, output details (page and bounding box), parameter override behavior, backend differences (SyncTeX vs Typst map), limitations of Typst results, and a required session variable. There is no output schema, so it appropriately explains return values. Missing error handling is minor for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with detailed descriptions (100% coverage), so baseline is 3. The description adds extra meaning by explaining the return format (PostScript points, v measured from top) and the behavior of omitting `file` to use compile root. This goes beyond the schema's parameter notes and clarifies usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Find'), resource ('given source line' in 'compiled PDF'), and the output (page number and bounding rectangles). It also distinguishes itself by noting it is the 'element→page-position capability the source parser cannot provide,' which separates it from source-content 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 context for when to use it (when mapping source elements to PDF position) and explicitly contrasts with the source parser. It does not name a specific alternative tool but implies no other tool provides this capability. The mention of the Typst coarse results and template limitations also helps set expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_infoARead-only
Report what KIND of project this is before doing anything else: whether it is Typst or LaTeX, which file is the likely compile root, how many source files it has, and which bibliography files it declares. Cheap (one file listing, no compile). Call this first when you do not already know the project's format — it tells you whether to write = Heading or \section{}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only. The description adds valuable behavioral context: it is cheap, performs 'one file listing,' does not compile, and is safe to call before other actions. It also discloses what kind of information the agent will receive, making side effects and cost expectations transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences but packs in purpose, output contents, cost, timing, and decision guidance. Every clause earns its place, and the most important directive ('Report what KIND of project... before doing anything else') is 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?
The description covers what the tool returns at a high level (format, root, count, bibliography files), when to call it, and what it costs. There is no output schema, so a bit more specificity about the exact shape or possible values could help, but the listed outputs are sufficient for an agent to call and interpret the tool correctly in practice.
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 a detailed explanation of project_id including format, source (list_projects / project URL), and exclusions (not a filesystem path or project name). The description does not add parameter-level semantics, but with full schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Report'), the resource ('project'), and the exact scope: project format (Typst vs LaTeX), likely compile root, source file count, and declared bibliography files. This clearly distinguishes it from siblings like list_files or status_summary by focusing on project-kind identification rather than generic listing or status.
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 'Call this first' and gives the triggering condition: 'when you do not already know the project's format.' It also explains practical value (choosing `= Heading` vs `\section{}`). However, it does not name specific alternative tools or describe when one of those would be preferred, so it stops short of full alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileARead-only
Read the contents of a file from a Typleaf project.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the file | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already establishes the read-only nature. The description adds the remote-vs-local distinction, but does not disclose any other behaviors like authentication, error patterns, or return encoding. Since the annotation covers safety, a 3 is appropriate for the limited extra context provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the core function and quickly points to the schema for parameter specifics, which is ideal for this simple tool.
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 is sufficient for a straightforward read operation. The schema covers parameter details, the annotation covers read-only safety, and the description plus schema collectively tell the agent what it does and when to use it. No output schema is needed since the return value is obviously the file contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both file_path and project_id are already fully described in the schema (with particularly thorough detail on project_id). The tool description itself adds no parameter-level information, so it meets the baseline of 3 without compensating for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'file from a Typleaf project', which distinguishes it from sibling write tools like edit_file, rewrite_file, and delete_file. The scope is specific (Typleaf project, not local files) and instantly actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: only when the user asks for Typleaf project work, never for general local I/O, and prefer local read/grep tools if the project is checked out locally. It also instructs to call list_projects first when unsure, which covers the alternative flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rewrite_fileBDestructive
Replace entire file contents. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | New full file content | |
| file_path | Yes | ||
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate that. It adds valuable behavioral context beyond annotations by specifying that the operation 'commits and pushes immediately', which is a significant side effect an agent should know. This goes beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two short sentences, with the primary action ('Replace entire file contents') front-loaded and no filler. Every word adds value, making it highly scannable for an agent.
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 destructive operation that commits and pushes remotely, the description is under-specified. It does not clarify how commit_message is handled when omitted, what happens if the file does not exist, or how file_path should be interpreted relative to the project root. The minimalism leaves an agent guessing on crucial execution details.
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 50% schema coverage, the description should compensate for undocumented parameters like file_path and commit_message, but it doesn't. It only implicitly ties to content via 'replace entire file contents'. No guidance is given on file_path format or commit_message requirements, leaving those ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it replaces the entire file contents, which is a specific verb+resource. It also notes immediate commit/push behavior, distinguishing it from partial editors like edit_file. However, it does not explicitly contrast with similar sibling tools like write_files, so it lacks full differentiation.
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 guidance is given on when to use this tool versus alternatives. The description only states what it does without mentioning scenarios like 'prefer edit_file for partial changes' or 'use create_file for new files'. The project_id schema description gives general context for Typleaf tools, but not about this specific tool's usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesARead-only
Regex search across every text file in the project. Use this to answer 'which files call X?' or 'where is Y defined?' — it is one request regardless of project size, whereas list_files plus read_file per candidate is one round trip per file and pulls whole documents into context to find a few lines.
Returns file, line number and the matching line, grouped by file. Binary files are skipped. Results are capped and the cap is reported, so a truncated result is never mistaken for a complete one.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Lines of surrounding context to include with each match (0-10). Default 0. | |
| pattern | Yes | Python regular expression, matched per line. Remember to escape regex metacharacters when searching for literal text — e.g. '#io-table\\(' for a call. | |
| path_glob | No | Optional glob to restrict which paths are searched, e.g. 'sections/**' or '*.typ'. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| ignore_case | No | Case-insensitive match. Default false. | |
| max_results | No | Maximum matches to return (default 200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds behavior beyond that: it returns file/line/matching line grouped by file, skips binary files, and caps results with the cap reported. This prevents misinterpreting truncated results as complete, which is valuable operational context not present in 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?
Two compact paragraphs with zero filler. The first sentence states the tool's core function; the second justifies its superiority over an alternative; the third explains the return format and cap behavior. Everything earns its place and is 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 read-only search tool with no output schema, the description discloses all necessary call-time knowledge: return format, grouping, binary skipping, and truncation reporting. Combined with the detailed project_id guidance in the schema, an agent has everything needed to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 6 parameters have full schema descriptions (100% coverage), so the description itself adds no parameter-level detail beyond what the schema already provides. The pattern escaping example and path_glob example live in the schema, not the description. Per the rubric, this is a baseline 3.
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 opens with a specific verb-resource pair ('Regex search across every text file in the project') and immediately names the two canonical use cases. It also distinguishes itself from the list_files + read_file alternative, making its unique role among siblings unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('which files call X?', 'where is Y defined?') and why it's preferable (one request vs. per-file round trips that pull whole documents). The project_id parameter description reinforces invocation rules (only for remote Typleaf projects, prefer local tools when a local copy exists, and list_projects first if unsure).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
section_page_mapA
Compile once, then map EVERY heading to the PDF page it starts on, plus the total page count and how full the last page is. This is the 'perceive the position of each element on the page' overview — ideal for judging how content is distributed across pages and for a fill-exactly-N-pages workflow. Omit file to use the compile root.
Cost differs by format: a LaTeX project resolves every heading from one offline SyncTeX parse, while a Typst project needs one request PER heading (Typleaf keeps its sync map inside the build directory, so there is nothing to download) — slow on a long document, and it can race the server's build eviction. The text-area fullness figures are LaTeX-only; Typst reports no page geometry. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Project-relative path of the root document (e.g. 'main.typ'). Omit to auto-detect it. Pass it explicitly if the project has several candidate roots and none is named main.typ / main.tex. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations set to false (not read-only, not idempotent, not destructive), the description carries the full burden of behavioral disclosure. It reveals that compilation is triggered ('Compile once'), exposes a race condition ('can race the server's build eviction'), notes format-specific request counts, and requires a session ('Requires TYPLEAF_SESSION'). This is substantive context beyond the annotations, earning a 4.
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 front-loaded with the core purpose, then usage, then cost/behavioral caveats. It is longer than average but each sentence adds value (format differences, race warning, session requirement). No filler. The structure flows logically from what → when → watch out, which earns a 4.
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 there is no output schema, the description adequately summarizes the output (headings mapped to pages, page count, last-page fullness) and notes that fullness figures are LaTeX-only. It covers format differences, performance implications, and prerequisites. While it doesn't detail the exact structure of the map, it provides enough for an agent to anticipate the result shape and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage for both parameters, including type, examples, and guidance for the project_id (remote vs. local, when to use). The description adds minor context like 'Omit file to use the compile root' (already in schema) and cost differences, but it does not add meaningfully to the parameters themselves. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps every heading to the PDF page it starts on, plus total page count and last-page fullness. This is a specific verb+resource with a concrete output. It distinguishes itself from siblings like get_sections (which lists sections) and get_page_count (which just gives count) by specifying the mapping and positional nature of the output.
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 gives usage contexts: 'ideal for judging how content is distributed across pages and for a fill-exactly-N-pages workflow.' It also warns about cost differences between LaTeX and Typst and mentions a race condition risk, giving the agent criteria to decide whether to call it. However, it does not explicitly name alternatives or conditions to prefer another tool, so it lacks direct when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_compilerADestructiveIdempotent
Set the project's compiler — most often to 'typst'. This is what makes a project a Typst project: Typleaf's CLSI only builds a Typst sync map when the compiler is 'typst' AND the root document ends in .typ, so a project full of .typ files left on pdflatex fails with TeX errors that never mention Typst, and PDF-position tools (locate_in_pdf, section_page_map) silently return nothing. Requires TYPLEAF_SESSION.
| Name | Required | Description | Default |
|---|---|---|---|
| compiler | Yes | Compiler to use for this project. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the conditional behavior of Typleaf's CLSI (only builds a Typst sync map when compiler is 'typst' AND root ends in .typ), which annotates the consequences of a wrong setting. It also calls out the session requirement. This adds meaningful context beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=true) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it front-loads the purpose, then explains the critical condition, the failure modes, and the requirement. While slightly long, the content is high-value and not padded, so it reads as efficient rather than verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter setter with an enum and no output schema, the description is complete: it explains the behavior, the failure consequences, and the session requirement. The only minor gap is not warning explicitly about the destructiveHint=true annotation, which could merit a caution, but the context provided is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the project_id parameter already extensively documented (format, source, and the remote-vs-local clarification). The description adds semantic value to the compiler parameter by explaining the special role of the 'typst' value, but mostly relies on the schema baseline, which 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 states a specific verb and resource ('Set the project's compiler') and immediately clarifies the most common value ('most often to ‘typst'') and what that accomplishes. It clearly distinguishes itself from build/compile tools by explaining the setting's role in making a project a Typst project.
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 a clear use context: set the compiler to 'typst' when the project should be a Typst project, and warns of the failure modes (TeX errors that never mention Typst, PDF-position tools silently returning nothing) when left on pdflatex. It mentions the TYPLEAF_SESSION requirement but does not explicitly name alternative tools or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
status_summaryARead-only
Get a quick overview: format (Typst or LaTeX), file count, and the heading structure of the root document.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint: true, so the agent knows this is a safe read operation. The description adds value by listing what the overview contains (format, file count, heading structure), but it does not disclose any further behavioral details such as return format, order, or potential errors. Given the annotation coverage, a 3 is appropriate — it adds context but no critical missing behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly-worded sentence that front-loads the primary action ('Get a quick overview') and specifies exactly what will be returned. No wasted words, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with a single fully-documented parameter and no output schema, the description adequately conveys what the agent will receive. It mentions the three components of the overview, which is sufficient for an agent to know what to expect. It does not describe output format, but that is not critical for a quick summary tool given the annotation and schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the project_id parameter 100% with detailed guidance including format, example, and when to use the tool. The description field itself does not mention parameters, so it adds no semantic value beyond the schema. With full schema coverage, the baseline of 3 is correct.
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 ('Get a quick overview') with a clear resource (the project) and enumerates three concrete pieces of information (format, file count, heading structure). This is distinct from the sibling file-editing and compilation tools, so an agent can immediately understand the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (quick overview) but does not explicitly state when to use this tool versus alternatives like read_file or project_info. The parameter schema includes broader guidance for the tool family ('Only call these tools when the user explicitly asks to work with a Typleaf project...'), but that is not part of the description itself. Since the context is slightly implied, it earns a 3 — clear enough but lacking explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_projectAIdempotent
Pull the latest changes from Typleaf (git pull).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is non-read-only, idempotent, and non-destructive. The description adds value by revealing the underlying git pull behavior, which implies fetching and merging remote changes into the local working copy. This is more informative than a bare 'sync' label and does not contradict 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?
One tight sentence conveys the core operation and the underlying mechanism. The parenthetical '(git pull)' immediately disambiguates the tool's meaning. There is no wasted or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter sync tool with annotations already covering idempotency and destructiveness, the description is nearly complete. It could mention potential merge conflicts or return behavior, but the git pull framing gives an agent enough context to invoke the tool appropriately.
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%, and the project_id parameter is thoroughly documented in the schema, including format, source, and what it is NOT. The description itself contributes no parameter information, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Pull'), a specific resource ('Typleaf'), and clarifies the exact operation with '(git pull)'. This clearly distinguishes sync_project from siblings like download_source, upload_file, or write_files, which involve different remote/local data flows.
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 project_id parameter description explicitly states these tools are only for Typleaf projects, never for general local file I/O, and advises preferring standard read/grep tools when a local checkout exists. It does not name a particular sibling alternative for pulling changes, but the git pull framing makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sectionBDestructive
Update a section's body by title, preserving its heading line. Typst (.typ) and LaTeX (.tex) are both supported; the parser is chosen from the file extension. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| new_content | Yes | New section body, EXCLUDING the heading itself (no leading '= Title' for Typst, no \section{} for LaTeX — the existing heading line is preserved). | |
| section_title | Yes | ||
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description adds key behaviors: it commits and pushes immediately, preserves the heading line, and selects the parser from the file extension. This provides useful operational context without contradicting 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?
Two concise sentences with no filler. The core action, supported formats, and side effect are front-loaded, making it easy to parse quickly.
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 is complex (mutating, commits/pushes, multiple formats, 5 parameters), yet the description omits critical details: how section_title is matched (exact vs fuzzy, case sensitivity), the role of the optional commit_message, and error behavior on missing sections. No output schema exists, so more explanation is needed but absent.
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 schema coverage at 40%, the description should illuminate the undocumented parameters (file_path, section_title, commit_message), but it does not. It only implies section_title via 'by title' and new_content via 'body', leaving these param semantics to the reader.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'a section's body', and specifies it works 'by title' and 'preserving its heading line'. This distinguishes it from general file editing tools like edit_file, though it doesn't explicitly name alternatives.
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 no guidance on when to choose this tool over siblings like edit_file, rewrite_file, or get_section_content. It mentions supported formats, but no context about the intended workflow or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileADestructive
Upload a local (possibly BINARY) file into a Typleaf project. Use this for images (PNG/JPG), PDFs, and other non-text assets that must not be UTF-8 decoded. Commits and pushes immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Destination path inside the project (e.g. 'figures/cat.png'). | |
| overwrite | No | If true, replace an existing file at file_path. Default false. Accepts boolean or case-insensitive string ('true'/'false'/'1'/'0'/'yes'/'no'). | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| source_path | Yes | Local filesystem path of the file to upload. | |
| commit_message | No | Git commit message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare mutation (readOnlyHint=false) and destructiveness (destructiveHint=true). The description adds valuable behavior beyond those: it handles binary files that must not be UTF-8 decoded, and it commits and pushes immediately. This gives the agent important operational knowledge not captured in annotations. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The purpose and binary warning are front-loaded, followed by the commit/push side effect. Every sentence earns its place, and the core message is immediately clear.
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 an upload tool with a full schema, the description covers the essential behavior (binary handling, immediate commit/push). It could mention return values or success indicators, but given no output schema, that is not strictly required. The description is sufficient for an agent to call this tool correctly in the intended context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides full descriptions for all five parameters (100% coverage), so the description does not need to elaborate further. The description's mention of binary handling is relevant to the overall behavior but does not specifically clarify any parameter beyond what the schema already states. Baseline 3 is appropriate given the high schema coverage.
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 ('Upload') and resource ('local file into a Typleaf project'), and explicitly scopes it to binary/non-text assets (images, PDFs). This clearly distinguishes it from siblings like create_file or edit_file, which likely handle text. The phrase 'must not be UTF-8 decoded' further clarifies the tool's niche.
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 states when to use the tool ('Use this for images (PNG/JPG), PDFs, and other non-text assets'), which gives clear context. It does not explicitly say 'use create_file for text', but the binary emphasis implies the exclusion. The 'Commits and pushes immediately' note adds behavioral context that helps anticipate side effects. A bit more explicit guidance on when *not* to use it (e.g., for text files) would merit a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_citationsARead-only
Detect likely-hallucinated references in the project's bibliography. Reads the project's bibliography — BibTeX (.bib) and Typst's native Hayagriva (.yml) alike — then verifies each entry's DOI / arXiv id against free authoritative catalogues (CrossRef, arXiv) with ZERO LLM calls. Returns three buckets: verified (catalogue match), suspicious (a concrete identifier that definitively does NOT resolve — high-confidence), and unverifiable (no identifier / coverage gap / book / rate-limit — reported separately and NEVER as fabrication). For a Typst project it ALSO reports keys cited in the source with no matching bibliography entry, which render as broken '?' references. Use to sanity-check an AI-assisted draft before submission.
| Name | Required | Description | Default |
|---|---|---|---|
| bib_path | No | Optional explicit path to a .bib or Hayagriva .yml file. Omit to auto-discover: for a Typst project the files named by #bibliography(...), otherwise every .bib in the project. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses 'ZERO LLM calls', the three output buckets and their meanings, that 'unverifiable' is 'reported separately and NEVER as fabrication', and that for Typst it also reports broken references. This is rich behavioral context that guides the agent's expectations and safety.
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?
While several sentences long, every clause earns its place by explaining a distinct behavioral aspect or parameter nuance. The main purpose is front-loaded, and the use-case guidance is at the end. 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?
For a tool with no output schema, the description fully specifies what the agent will receive (three buckets with meanings), the input details, and edge cases (no identifier, coverage gap, book, rate-limit). It also notes Typst-specific broken references. Everything needed to call and interpret the result is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already has 100% coverage, and the description greatly enriches both parameters: for bib_path it explains auto-discovery logic (#bibliography(...), otherwise every .bib); for project_id it clarifies what it is not (not a path, not '.', not a name/title), how to obtain it (list_projects or URL), and the remote vs. local context. This far exceeds the schema's basic 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 opens with a clear, specific verb phrase 'Detect likely-hallucinated references' and specifies the resource ('the project's bibliography'), then details the exact behaviors (BibTeX/Hayagriva, DOI/arXiv check, three buckets). This is unambiguous and distinct from the listed siblings, which are file/compile/project operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('Use to sanity-check an AI-assisted draft before submission'), when not to (do not use for general local file I/O; prefer read/grep for local checkout), and how to obtain the project_id. Also instructs to call list_projects first when unsure, giving a clear decision tree.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_filesADestructive
Apply a coordinated change across SEVERAL files, all-or-nothing. Use this instead of calling edit_file/rewrite_file in a loop whenever the edits belong together — converting call sites to a new helper, renaming a symbol across chapters, updating a template and its users. A loop that fails halfway leaves the project in a state that is neither old nor new, and you find out when the compile breaks.
Every edit is validated and resolved BEFORE anything is written, so the common failures (missing file, search string matching twice or not at all, bad path) touch nothing. If a write still fails, the files already written are restored. Each entry takes either content (full replacement) or old_string+new_string (surgical, must match exactly once).
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The edits to apply together. | |
| project_id | Yes | Typleaf project ID — a 24-character lowercase hex string (e.g. '692a83fb82feceb233c4b0e7'), obtained from list_projects or the project URL. NOT a local filesystem path, NOT '.', NOT a project name or title. These tools operate on the REMOTE Typleaf project. Only call these tools when the user explicitly asks to work with a Typleaf project — never for general local file I/O. If you already have a copy of THIS project checked out on the local filesystem, prefer the standard read/grep tools against that path. Always call list_projects first when unsure. | |
| commit_message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark destructiveHint=true, but the description discloses the atomic all-or-nothing behavior, validation-before-write, rollback on failure, and the two edit modes (content vs old_string/new_string). This goes well beyond the annotations and describes exactly what happens on failure and how edits are resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs that front-load the core purpose and then elaborate on behavior and modes. The language is efficient and free of fluff, though the second paragraph could be slightly more structured (e.g., bullet points for the modes), but overall it is appropriately sized.
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 multi-file atomic write tool with no output schema, the description covers all essential behavioral aspects: atomicity, pre-validation, rollback, and the parameter semantics for each edit type. It also contrasts with sibling tools, making it sufficient for an agent to call correctly without additional documentation.
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 explains the meaning of the two edit modes (full replacement vs surgical match) and that old_string must match exactly once, which is not fully clear from the schema alone. However, it does not discuss the commit_message parameter at all, and the project_id parameter is described in its own schema entry, not in the tool description, so some semantics are delegated to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (apply) and resource (coordinated change across several files) and explicitly contrasts with edit_file/rewrite_file loops. The 'all-or-nothing' qualifier adds precision and differentiates it from simple file writes.
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?
Directly instructs when to use this tool ('instead of calling edit_file/rewrite_file in a loop whenever the edits belong together') and gives concrete examples (converting call sites, renaming symbols, updating templates). Also explains the pitfall of a loop (project left in inconsistent state), which makes the usage guidance actionable.
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.
29 tool updates
v0.1.0- First observed
compile_project - First observed
create_file - First observed
create_project - First observed
delete_file - First observed
download_log - First observed
download_pdf - First observed
download_source - First observed
download_source_zip - First observed
edit_file - First observed
get_diff - First observed
get_page_count - First observed
get_section_content - First observed
get_sections - First observed
list_files - First observed
list_history - First observed
list_projects - First observed
locate_in_pdf - First observed
project_info - First observed
read_file - First observed
rewrite_file - First observed
search_files - First observed
section_page_map - First observed
set_compiler - First observed
status_summary - First observed
sync_project - First observed
update_section - First observed
upload_file - First observed
verify_citations - First observed
write_files
TDQS
Scored across 29 tools
Most tools target a distinct action/resource combination, and the descriptions clearly separate edit_file, rewrite_file, update_section, and write_files. status_summary, project_info, and get_sections have some overlap in reporting headings or project overview, but the descriptions provide enough guidance to choose correctly.
The tool set predominantly follows a clear verb_noun pattern such as list_files, create_file, delete_file, and download_pdf. A few noun-style names like status_summary, project_info, and section_page_map are minor deviations that do not obscure the overall pattern.
With 29 tools, the surface exceeds the 25+ threshold and feels heavy for an agent to navigate. Many tools are individually justified, but there are several closely related variants around editing, downloading, and PDF mapping that increase selection cost.
The core document lifecycle is well covered: project creation, file CRUD, editing, compilation, PDF/log retrieval, page mapping, citation verification, and git operations. Minor gaps such as deleting or renaming projects and moving files are workaround-able and not central to the primary compile-edit workflow.
Maintenance
Related MCP Connectors
Edit your Overleaf LaTeX projects from Claude and ChatGPT; every change is a real Git commit.
Persistent AI LaTeX workspace: edit and compile multi-file projects, export publication-ready PDFs.
A hosted LaTeX editor your assistant can actually use. Search 1,019 free templates, create and edit projects, and compile them to PDF on a real TeX Live farm, getting back the PDF or the compile log when a build fails. Thirteen tools behind OAuth 2.1, with nothing to install and nothing to run locally.
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude and AI agents to read and edit Overleaf documents in real time, with support for project listing, document manipulation, LaTeX compilation, and live collaboration.79 npm26MIT
- FlicenseBqualityCmaintenanceEnables AI agents to interact with Overleaf projects directly, including creating projects, managing files, and editing documents in real-time using Overleaf's native Operational Transformation protocol.10-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to read, write, and compile LaTeX projects locally, view PDF pages as images, and manage project files, with live updates reflected in a web-based editor.-
- AlicenseNot gradedqualityBmaintenanceEnables coding agents to read, write, compile, and download LaTeX projects on a self-hosted Overleaf instance.8 npm1MIT