Server definition
- Hash
- sha256:17a4ba1d80093f397a03952c19215521c86e7d8a9f4f01c56d3783ca46ed04fe
- What it is
- What a remote MCP server returned when asked what it offers: 23 tools
The blob, as servednamed by its sha256
{
"instructions": "Documents in, verified structure out. extract_statement turns a bank statement PDF into a transaction table AND cross-checks it (opening + credits - debits must equal closing — you are told if it does not balance). extract_tables aligns tables from differently-formatted documents onto one schema. pdf_to_markdown keeps headings, tables and multi-column reading order. Scanned images (png/jpg URLs) are read by a vision model. Files are processed in memory and not retained; the beta platform covers the user charge ($0.00).",
"tools": [
{
"description": "Get the status or result of a job started by deep_research, translate_pdf, or make_slides. Poll every 15-30 seconds until status is \"done\" or \"error\". While work is pending, follow retry_after_seconds and next_action; when complete, prefer structured_result when present. Example — GET https://ainetcafe.com/t/check_job?job_id=<id-from-a-job-tool>",
"inputSchema": {
"properties": {
"job_id": {
"description": "The job_id returned when the task was started.",
"type": "string"
}
},
"required": [
"job_id"
],
"type": "object"
},
"name": "check_job",
"outputSchema": {
"properties": {
"error": {
"type": "string"
},
"is_terminal": {
"type": "boolean"
},
"job_id": {
"type": "string"
},
"kind": {
"type": "string"
},
"next_action": {
"type": [
"object",
"null"
]
},
"result": {},
"retry_after_seconds": {
"type": "integer"
},
"status": {
"type": "string"
},
"structured_result": {}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "Check a resume (PDF or .docx) the way an applicant tracking system reads it: is the text extractable, are email/phone/sections findable, do multi-column layouts, tables or emoji break parsing. Returns a score plus concrete fixes ordered by impact — like the W3C validator, but for resumes.",
"inputSchema": {
"properties": {
"url": {
"description": "Public URL of the resume (PDF or .docx).",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "check_resume",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Print-quality PDF from a URL or raw HTML via self-hosted Gotenberg (headless Chromium). Returns a hosted PDF download URL. Example — GET https://ainetcafe.com/t/convert_to_pdf?url=https://example.com",
"inputSchema": {
"properties": {
"html": {
"description": "Raw HTML to convert (alternative to url).",
"type": "string"
},
"url": {
"description": "Page URL to convert (either url or html is required).",
"type": "string"
}
},
"type": "object"
},
"name": "convert_to_pdf",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Convert a transaction CSV into a .qbo / OFX bank-feed file that QuickBooks and similar accounting software import directly. Needs date, description and amount columns (or debit + credit). Pairs with extract_statement: statement PDF in, importable bank feed out.",
"inputSchema": {
"properties": {
"account_id": {
"description": "Your account number as the accounting software expects it.",
"type": "string"
},
"bank_id": {
"description": "Routing / bank identifier, if your import asks for one.",
"type": "string"
},
"csv": {
"description": "CSV content with a header row.",
"type": "string"
},
"currency": {
"description": "Three-letter currency code, default USD.",
"type": "string"
},
"url": {
"description": "Or a link to the CSV.",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "csv_to_qbo",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Start an autonomous web research task. The agent plans sub-questions, searches the web, reads the sources and writes a report with citations — this is real research, not a single model call, and takes 2-5 minutes. Returns a job_id immediately; poll check_job to get the report. Use this when you need sourced, current information rather than what a model already knows. Powered by gpt-researcher (29k stars) hosted at AI NetCafé. Example — tools/call deep_research {\"topic\":\"State of MCP adoption in 2026?\"} → poll check_job",
"inputSchema": {
"properties": {
"depth": {
"description": "quick = outline only (~1 min); standard = full cited report (~3 min). Default standard.",
"enum": [
"quick",
"standard"
],
"type": "string"
},
"topic": {
"description": "The research question. Phrase it as a question, not a keyword.",
"type": "string"
}
},
"required": [
"topic"
],
"type": "object"
},
"name": "deep_research",
"outputSchema": {
"properties": {
"job_id": {
"type": "string"
},
"poll_interval_seconds": {
"type": "integer"
},
"status": {
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "文档翻译成中文,保留段落结构。逐段翻译并核对段落条数进出一致 —— 漏译最常见的形态就是整段消失,这里会当场发现。入参 url(文档链接)或 text,可选 target(默认 zh)。自证不通过不计费。",
"inputSchema": {
"additionalProperties": true,
"properties": {
"target": {
"type": "string"
},
"text": {
"type": "string"
},
"url": {}
},
"type": "object"
},
"name": "doc_translate_cn",
"outputSchema": null
},
{
"description": "Give it up to 20 invoice URLs (PDF or page images) and get back one table ready to post: number, date, seller, buyer, net / tax / gross, currency. Every row is checked in code — net + tax must equal gross — and the batch total is re-added independently, so a row the model misread is flagged with the exact difference instead of quietly landing in your books. Mixed currencies get no batch total on purpose: adding them together would be an accounting error. CSV is UTF-8 with BOM so Excel opens it right.",
"inputSchema": {
"properties": {
"urls": {
"description": "Invoice URLs — comma-separated, or pass an array. Up to 20 per call.",
"type": "string"
}
},
"required": [
"urls"
],
"type": "object"
},
"name": "extract_invoices",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Turn a bank statement or transaction PDF into a clean transaction table (JSON + CSV), then cross-check it: opening + credits - debits must equal the stated closing balance. If it does not balance you get the exact difference and which row the running balance first breaks at — so you know whether the table is safe to use for accounting. Text-layer PDFs only (scanned images not yet supported).",
"inputSchema": {
"properties": {
"url": {
"description": "Public URL of the statement PDF.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "extract_statement",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Extract tables from a PDF into structured rows (JSON + CSV). Pass fields to force a fixed set of columns — that aligns a pile of documents that each name their headers differently into one consistent table. Rows the model was unsure about are flagged rather than guessed. Text-layer PDFs only.",
"inputSchema": {
"properties": {
"fields": {
"description": "Optional comma-separated target columns, e.g. \"invoice_no,supplier,date,amount\". Omit to infer from the header.",
"type": "string"
},
"url": {
"description": "Public URL of the PDF.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "extract_tables",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Detect the real encoding of a CSV (GB18030, Shift-JIS, Windows-1252…), repair mojibake (UTF-8 that was read as Latin-1, e.g. \"é\"), and re-emit UTF-8 with a BOM so Excel opens it correctly.",
"inputSchema": {
"properties": {
"text": {
"description": "Or paste the CSV content directly.",
"type": "string"
},
"url": {
"description": "Public URL of the CSV.",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "fix_csv_encoding",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Turn a topic or an outline into a real downloadable .pptx file — not a link into someone's web editor. Returns a job_id; poll check_job for the download URL. Usually 1-3 minutes. Powered by Presenton (open source) hosted at AI NetCafé. Example — tools/call make_slides {\"topic\":\"Q3 review\",\"slides\":8} → poll check_job",
"inputSchema": {
"properties": {
"instructions": {
"description": "Optional extra guidance on style or emphasis.",
"type": "string"
},
"language": {
"description": "Output language, e.g. \"Chinese\", \"English\". Default Chinese.",
"type": "string"
},
"slides": {
"description": "Number of slides (default 8).",
"type": "integer"
},
"topic": {
"description": "The topic, or a full outline to follow.",
"type": "string"
}
},
"required": [
"topic"
],
"type": "object"
},
"name": "make_slides",
"outputSchema": {
"properties": {
"job_id": {
"type": "string"
},
"poll_interval_seconds": {
"type": "integer"
},
"status": {
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "会议录音 → 纪要包 PDF:转写、要点、决议、待办。纪要里点名的负责人会与转写原文比对 —— 把任务安排给一个从没在录音里出现过的人,报告会判不通过。入参 url(音频直链)。自证不通过不计费。",
"inputSchema": {
"additionalProperties": true,
"properties": {
"audio": {},
"url": {
"type": "string"
}
},
"type": "object"
},
"name": "meeting_pack",
"outputSchema": null
},
{
"description": "Stamp page numbers or footer text onto every page of a PDF. Supports a starting number, roman numerals, skipping a cover page, position and font size — the combination Acrobat cannot do without scripting. Template supports {n} and {total}, e.g. \"Page {n} of {total}\".",
"inputSchema": {
"properties": {
"font_size": {
"description": "Font size, default 10.",
"type": "integer"
},
"position": {
"description": "bottom-center (default) | bottom-left | bottom-right | top-center | top-left | top-right",
"type": "string"
},
"skip_first": {
"description": "Leave this many leading pages unnumbered, e.g. 1 for a cover.",
"type": "integer"
},
"start_at": {
"description": "Number to start from (default 1).",
"type": "integer"
},
"style": {
"description": "arabic (default) | roman (i, ii, iii) | ROMAN (I, II, III)",
"type": "string"
},
"text": {
"description": "Template, default \"{n}\". Use {n} and {total}.",
"type": "string"
},
"url": {
"description": "Public URL of the PDF.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "pdf_add_page_numbers",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Count pages and report each page size of a PDF (by URL).",
"inputSchema": {
"additionalProperties": true,
"properties": {
"url": {}
},
"type": "object"
},
"name": "pdf_page_count",
"outputSchema": null
},
{
"description": "Convert a PDF (or a scanned page image) into clean Markdown that keeps headings, lists and tables, and puts multi-column pages in the right reading order. Text-layer PDFs are read exactly and cost far less; images go through a vision model.",
"inputSchema": {
"properties": {
"url": {
"description": "Public URL of the PDF, or of a page image (png/jpg) for scanned documents.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "pdf_to_markdown",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Stamp diagonal text watermark on every page of a PDF (by URL). text = the watermark.",
"inputSchema": {
"additionalProperties": true,
"properties": {
"text": {
"type": "string"
},
"url": {}
},
"type": "object"
},
"name": "pdf_watermark",
"outputSchema": null
},
{
"description": "PowerPoint .pptx (by URL) → PDF handout.",
"inputSchema": {
"additionalProperties": true,
"properties": {
"url": {}
},
"type": "object"
},
"name": "pptx_to_pdf",
"outputSchema": null
},
{
"description": "Strip emails, phone numbers, ID numbers, API keys, private keys, JWTs, card numbers and IPs out of text, returning the redacted text plus a mapping table to restore them afterwards. Rule-based only — no model sees the input. The same value always maps to the same placeholder, so the answer can be restored.",
"inputSchema": {
"properties": {
"only": {
"description": "Optional comma-separated subset, e.g. \"EMAIL,API_KEY,PRIVATE_KEY\".",
"type": "string"
},
"text": {
"description": "The text to redact.",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "redact_text",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Fetch an audio file from a URL and transcribe it to text with open-source Whisper (100 languages, self-hosted). Good for voice memos, podcast clips and meeting recordings up to ~15 MB. Example — GET https://ainetcafe.com/t/transcribe_audio?url=<public-audio-url>",
"inputSchema": {
"properties": {
"language": {
"description": "Hint language code like \"zh\", \"en\"; default auto-detect.",
"type": "string"
},
"url": {
"description": "Public URL of the audio file (mp3/wav/m4a/ogg, ≤15 MB).",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "transcribe_audio",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Translate a PDF from a URL while preserving the original layout — formulas, figures and two-column academic typesetting stay intact, unlike ordinary translators that flatten the document. Returns a job_id; poll check_job for the download links (translated-only and bilingual side-by-side). Typically 20-60 seconds for a few pages. Powered by PDFMathTranslate (36k stars) hosted at AI NetCafé. Example — tools/call translate_pdf {\"url\":\"<pdf-url>\",\"target\":\"zh\"} → poll check_job",
"inputSchema": {
"properties": {
"lang_to": {
"description": "Target language, e.g. \"Simplified Chinese\", \"Japanese\". Default Simplified Chinese.",
"type": "string"
},
"pages": {
"description": "How much to translate. first = 1 page, first5 = first 5 pages (default), all = whole document (slow and expensive).",
"enum": [
"first",
"first5",
"all"
],
"type": "string"
},
"url": {
"description": "Direct URL to the PDF (e.g. an arXiv PDF link).",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "translate_pdf",
"outputSchema": {
"properties": {
"job_id": {
"type": "string"
},
"poll_interval_seconds": {
"type": "integer"
},
"status": {
"type": "string"
}
},
"required": [
"job_id",
"status"
],
"type": "object"
}
},
{
"description": "Any article URL → Word .docx (rendered page → clean document).",
"inputSchema": {
"additionalProperties": true,
"properties": {
"url": {}
},
"type": "object"
},
"name": "webpage_to_docx",
"outputSchema": null
},
{
"description": "Describe a task in plain language (any language) and get back exactly which tools on this server do it, with ready-to-run example calls — instead of reading the whole catalogue and guessing. Also returns multi-step recipes when a task needs several tools chained (invoices to a ledger, a bank statement reconciled, a messy CSV turned into a deliverable). Deterministic and free: it calls no model, costs nothing, and never runs out of quota. Call this FIRST when you are not sure what this server offers.",
"inputSchema": {
"properties": {
"task": {
"description": "What you are trying to do, e.g. \"reconcile a bank statement against my books\" or \"把一堆发票整理成能入账的表格\"",
"type": "string"
}
},
"required": [
"task"
],
"type": "object"
},
"name": "what_can_you_do",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Excel .xlsx (by URL) → PDF.",
"inputSchema": {
"additionalProperties": true,
"properties": {
"url": {}
},
"type": "object"
},
"name": "xlsx_to_pdf",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:17a4ba1d80093f397a03952c19215521c86e7d8a9f4f01c56d3783ca46ed04fe | sha256sum