{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "capabilities": {
    "tools": [
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui um autor no fim da lista. affiliation_id (de list_authors ou set_affiliation) liga o autor a uma afilia\u00e7\u00e3o. Respeita o limite de autores do plano do aluno. undo_last_change n\u00e3o desfaz autores; use remove_author.",
        "name": "add_author",
        "title": "Incluir autor"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui no texto o n\u00famero de uma figura, tabela, f\u00f3rmula numerada ou se\u00e7\u00e3o do trabalho, que o FastFormat mant\u00e9m atualizado. S\u00f3 o n\u00famero entra no PDF (\"2.1\"): a palavra \"Tabela\", \"Figura\", \"Equa\u00e7\u00e3o\" ou \"Se\u00e7\u00e3o\" precisa estar no texto logo antes, terminando after_text. Mande em target_reference a reference que a ferramenta devolveu ao incluir o elemento; para uma se\u00e7\u00e3o, mande o t\u00edtulo dela em target_section_title. Entra logo depois de after_text.",
        "name": "add_cross_reference",
        "title": "Incluir refer\u00eancia cruzada"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui uma nota de rodap\u00e9 num par\u00e1grafo do trabalho, logo depois de after_text (sem espa\u00e7o, como o n\u00famero da nota aparece). Leia antes a se\u00e7\u00e3o com read_section e copie os trechos do texto.",
        "name": "add_footnote",
        "title": "Incluir nota de rodap\u00e9"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        },
        "description": "Cadastra na biblioteca do aluno as refer\u00eancias bibliogr\u00e1ficas que voc\u00ea encontrou na conversa (at\u00e9 10 por chamada). Envie t\u00edtulo, autores, ano e, se souber, o DOI. O FastFormat confere se cada refer\u00eancia existe e cadastra com os dados da fonte oficial; refer\u00eancias que j\u00e1 est\u00e3o na biblioteca n\u00e3o s\u00e3o repetidas. Use o reference_id devolvido para citar o trabalho no texto. P\u00e1ginas da internet e not\u00edcias (sem DOI) podem ser cadastradas com url e t\u00edtulo: o FastFormat confere se o link est\u00e1 no ar e cadastra como refer\u00eancia online com fonte url_checked \u2014 isso s\u00f3 prova que o link est\u00e1 ativo, n\u00e3o que o conte\u00fado da p\u00e1gina bate com o t\u00edtulo. Se o link estiver fora do ar (url_dead), nada \u00e9 cadastrado: avise o aluno e pe\u00e7a o endere\u00e7o correto. Se o status for doi_mismatch, o DOI existe mas \u00e9 de outro trabalho (o t\u00edtulo oficial vem em title): nada foi cadastrado; confirme com o aluno e reenvie com o t\u00edtulo oficial ou s\u00f3 com o DOI, sem t\u00edtulo. Se alguma n\u00e3o for encontrada (not_found), avise o aluno e NUNCA reenvie aquele item com confirmed_unverified=true sem que o aluno tenha dito que quer cadastr\u00e1-lo mesmo sem verifica\u00e7\u00e3o; a confirma\u00e7\u00e3o vale por item e s\u00f3 para um item que j\u00e1 deu not_found. Itens em pending n\u00e3o foram processados: chame de novo s\u00f3 com eles.",
        "name": "add_references",
        "title": "Cadastrar refer\u00eancias"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Confere as cita\u00e7\u00f5es de um trabalho: cita\u00e7\u00f5es que apontam para refer\u00eancias que n\u00e3o existem mais na biblioteca do aluno, cita\u00e7\u00f5es de refer\u00eancias n\u00e3o verificadas, cita\u00e7\u00f5es escritas \u00e0 m\u00e3o no texto, como (SILVA, 2020) ou Silva (2020), que ainda n\u00e3o est\u00e3o no formato do editor (com uma sugest\u00e3o de refer\u00eancia da biblioteca, quando bate), e quantas refer\u00eancias da biblioteca n\u00e3o s\u00e3o citadas neste trabalho. Para trocar uma cita\u00e7\u00e3o \u00e0 m\u00e3o pela do editor, use cite_in_paragraph com replace_text. Se o aluno n\u00e3o indicou qual trabalho, ou se h\u00e1 mais de um poss\u00edvel, pergunte qual antes de usar.",
        "name": "audit_citations",
        "title": "Conferir cita\u00e7\u00f5es"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Insere cita\u00e7\u00f5es de refer\u00eancias da biblioteca do aluno num par\u00e1grafo do trabalho, no formato do editor (o FastFormat monta o texto da cita\u00e7\u00e3o). Antes, leia a se\u00e7\u00e3o com read_section e mande em paragraph_hint um trecho copiado do par\u00e1grafo que s\u00f3 apare\u00e7a nele. Cite s\u00f3 com ids devolvidos por list_references ou add_references; para citar algo novo, cadastre antes com add_references. Use type \"narrative\" quando o autor aparece no texto (\"Segundo Silva (2020)\"), com after_text no trecho do nome; use \"parenthesis\" para a cita\u00e7\u00e3o no fim da frase, como (SILVA, 2020). Sem after_text nem replace_text, a cita\u00e7\u00e3o entra no fim do par\u00e1grafo. Use replace_text para trocar uma cita\u00e7\u00e3o escrita \u00e0 m\u00e3o pelo aluno. At\u00e9 10 cita\u00e7\u00f5es por chamada; todas s\u00e3o gravadas juntas, ou nenhuma.",
        "name": "cite_in_paragraph",
        "title": "Citar no par\u00e1grafo"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Come\u00e7a um trabalho novo do estudante a partir de template_id, com o t\u00edtulo e as se\u00e7\u00f5es indicadas. sections precisa ter ao menos um item {title, guidance?}; guidance \u00e9 uma orienta\u00e7\u00e3o tempor\u00e1ria para o estudante substituir no editor, n\u00e3o texto pronto. N\u00e3o gera conte\u00fado com IA nem PDF. Cada chamada cria um trabalho novo.",
        "name": "create_document",
        "title": "Come\u00e7ar um trabalho"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Gera o PDF do trabalho e devolve o link para abrir (v\u00e1lido por 24 horas). Espera at\u00e9 20 segundos; se o PDF ainda n\u00e3o ficou pronto, devolve status running e o task_id para acompanhar com get_pdf_status. Limite de 10 PDFs por hora.",
        "name": "generate_pdf",
        "title": "Gerar o PDF"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Mostra os dados do trabalho que o modelo usa (capa, institui\u00e7\u00e3o, cidade, palavras-chave, op\u00e7\u00f5es do modelo) e o layout (fonte, papel, idioma, legendas), com o valor atual, o tipo e as op\u00e7\u00f5es aceitas. Use antes de set_document_fields para saber os nomes. Campos com editable false (arquivos, por exemplo) s\u00f3 o aluno preenche no editor.",
        "name": "get_document_fields",
        "title": "Ver dados do trabalho"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Consulta um PDF que come\u00e7ou a ser gerado por generate_pdf, pelo task_id. Quando fica pronto, devolve o link do PDF.",
        "name": "get_pdf_status",
        "title": "Ver se o PDF ficou pronto"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Uso interno do visualizador: devolve o estado atual da pr\u00e9via.",
        "name": "get_preview",
        "title": "Atualizar a pr\u00e9via"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui um trecho de c\u00f3digo-fonte no trabalho, com legenda e a linguagem (para as cores), no formato do editor.",
        "name": "insert_code",
        "title": "Incluir c\u00f3digo"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": true,
          "readOnlyHint": false
        },
        "description": "Inclui uma figura no trabalho, com legenda e fonte, a partir de uma imagem que j\u00e1 existe: o endere\u00e7o p\u00fablico da imagem (image_url, http/https, JPEG ou PNG at\u00e9 10 MB) ou a imagem embutida em base64 (image_base64). Mande s\u00f3 um dos dois. Use image_base64 s\u00f3 para imagem min\u00fascula, de at\u00e9 5 KB: escrever a imagem inteira na conversa \u00e9 lento e pode travar a resposta. O FastFormat n\u00e3o cria imagens; para gr\u00e1fico gerado na conversa ou imagem no computador do aluno, use request_image_upload. Devolve reference, para citar a figura no texto com add_cross_reference.",
        "name": "insert_figure",
        "title": "Incluir figura"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui uma f\u00f3rmula matem\u00e1tica no trabalho, conferida antes de gravar (f\u00f3rmula com erro n\u00e3o \u00e9 inclu\u00edda). Por padr\u00e3o entra destacada, num par\u00e1grafo pr\u00f3prio e numerada, e devolve reference para citar com add_cross_reference. Para uma f\u00f3rmula no meio do texto, use inline true com paragraph_hint e after_text.",
        "name": "insert_formula",
        "title": "Incluir f\u00f3rmula"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui uma lista no trabalho, com marcadores ou numerada (ordered true). Mande cada item como texto, sem formata\u00e7\u00e3o. style muda o marcador: disc, circle ou square; numerada: decimal, lower-alpha, upper-alpha, lower-roman ou upper-roman.",
        "name": "insert_list",
        "title": "Incluir lista"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui uma cita\u00e7\u00e3o longa (mais de tr\u00eas linhas, recuada) no trabalho. Mande o texto citado; separe par\u00e1grafos com uma linha em branco. Com citation (ids da biblioteca do aluno, tipo e p\u00e1ginas, como em cite_in_paragraph), a cita\u00e7\u00e3o do autor entra no fim do texto.",
        "name": "insert_quote",
        "title": "Incluir cita\u00e7\u00e3o longa"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Inclui uma tabela no trabalho, no formato do editor, com legenda e fonte. Mande as c\u00e9lulas como texto (sem formata\u00e7\u00e3o), linha a linha; a primeira linha \u00e9 o cabe\u00e7alho quando header for true. At\u00e9 50 linhas e 12 colunas. N\u00e3o escreva \"Tabela 1 \u2013\" na legenda: o n\u00famero vem do modelo do trabalho. Devolve reference, para citar a tabela no texto com add_cross_reference.",
        "name": "insert_table",
        "title": "Incluir tabela"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Lista os autores do trabalho, na ordem em que aparecem, com a afilia\u00e7\u00e3o de cada um, e as afilia\u00e7\u00f5es cadastradas.",
        "name": "list_authors",
        "title": "Ver autores"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Lista os trabalhos do aluno (mais recentes primeiro), com id, t\u00edtulo, modelo e data da \u00faltima altera\u00e7\u00e3o. Use para descobrir o document_id antes das outras ferramentas; o filtro query busca no t\u00edtulo. Se o aluno n\u00e3o indicou qual trabalho, ou se h\u00e1 mais de um poss\u00edvel, pergunte qual antes de usar.",
        "name": "list_documents",
        "title": "Listar trabalhos"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Lista as refer\u00eancias bibliogr\u00e1ficas da biblioteca do aluno, com o id usado nas cita\u00e7\u00f5es do texto (atributo ids=\"...\" do span de cita\u00e7\u00e3o), t\u00edtulo, autores, ano, DOI e verification (crossref ou openalex quando conferida na fonte oficial, url_checked quando s\u00f3 o link foi conferido (a confer\u00eancia n\u00e3o valida o conte\u00fado da p\u00e1gina), unverified quando cadastrada sem verifica\u00e7\u00e3o). Com document_id, informa em cited_in_document se cada refer\u00eancia j\u00e1 \u00e9 citada naquele trabalho. O filtro query busca no t\u00edtulo e nos autores. Use s\u00f3 refer\u00eancias desta lista; nunca invente refer\u00eancias. Se o aluno n\u00e3o indicou qual trabalho, ou se h\u00e1 mais de um poss\u00edvel, pergunte qual antes de usar.",
        "name": "list_references",
        "title": "Listar refer\u00eancias"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Lista modelos ativos para come\u00e7ar um trabalho. query busca em nome, alias, tags, categoria e institui\u00e7\u00e3o; document_type filtra book, article ou presentation. Use o id retornado como template_id de create_document.",
        "name": "list_templates",
        "title": "Listar modelos"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Sobe (up) ou desce (down) um autor uma posi\u00e7\u00e3o na lista.",
        "name": "move_author",
        "title": "Mudar ordem do autor"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Mostra a estrutura de um trabalho do aluno sem o texto: t\u00edtulo, modelo, partes preenchidas (com tamanho), se\u00e7\u00f5es (t\u00edtulos h1/h2 do corpo), dados de capa, autores e a \u00faltima altera\u00e7\u00e3o feita pelo assistente. Use antes de read_section para saber o que existe. Aten\u00e7\u00e3o: abstract_translated \u00e9 o Resumo (em portugu\u00eas) e abstract \u00e9 o Abstract (em ingl\u00eas). Se o aluno n\u00e3o indicou qual trabalho, ou se h\u00e1 mais de um poss\u00edvel, pergunte qual antes de usar.",
        "name": "read_document",
        "title": "Ver estrutura do trabalho"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "L\u00ea o HTML de uma parte do trabalho (part) ou de uma se\u00e7\u00e3o dela (section_title = t\u00edtulo exato de um h1/h2, como listado por read_document). Sem section_title devolve a parte inteira. Nomes de part v\u00e1lidos: title, subtitle, abstract, abstract_translated, errata, acknowledgment, preface, presentation, dedicatory, epigraph, index, glossary, content, appendix, attachment. Aten\u00e7\u00e3o: abstract_translated \u00e9 o Resumo (em portugu\u00eas) e abstract \u00e9 o Abstract (em ingl\u00eas). Se o aluno n\u00e3o indicou qual trabalho, ou se h\u00e1 mais de um poss\u00edvel, pergunte qual antes de usar.",
        "name": "read_section",
        "title": "Ler se\u00e7\u00e3o do trabalho"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Tira um autor do trabalho. undo_last_change n\u00e3o desfaz isso.",
        "name": "remove_author",
        "title": "Remover autor"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Cria um link para o aluno enviar uma imagem do computador dele (JPEG ou PNG, at\u00e9 10 MB). Quando ele envia, a figura entra no trabalho no lugar pedido aqui, com a legenda e a fonte. Use quando a imagem n\u00e3o tem endere\u00e7o p\u00fablico, inclusive gr\u00e1fico gerado na conversa. O link vale 24 horas e serve para um envio s\u00f3; mostre upload_url ao aluno e pe\u00e7a para ele avisar quando enviar.",
        "name": "request_image_upload",
        "title": "Pedir envio de imagem"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Cria uma afilia\u00e7\u00e3o (institui\u00e7\u00e3o, departamento, endere\u00e7o) ou, com affiliation_id, altera s\u00f3 os dados enviados de uma existente. Com author_id, liga o autor a essa afilia\u00e7\u00e3o.",
        "name": "set_affiliation",
        "title": "Cadastrar afilia\u00e7\u00e3o"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Preenche dados do trabalho (attributes, com os nomes de get_document_fields) e o layout (layout: fonte, papel, idioma etc.). Sim/n\u00e3o vai como true ou false; campos com op\u00e7\u00f5es s\u00f3 aceitam uma delas. Se um valor for recusado, nada \u00e9 gravado. Campos de texto curto s\u00e3o uma linha s\u00f3; textos longos (tipo textarea) n\u00e3o aceitam < nem >. O resumo, o abstract e suas palavras-chave entram com write_section, no HTML da parte correspondente; os demais atributos do manifesto entram aqui. Devolve o valor anterior de cada campo alterado.",
        "name": "set_document_fields",
        "title": "Preencher dados do trabalho"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Desfaz a altera\u00e7\u00e3o mais recente que o assistente fez no trabalho, voltando os campos alterados ao valor anterior. S\u00f3 funciona se o aluno n\u00e3o editou esses campos depois. N\u00e3o cobre dados da capa nem autores: se a \u00faltima altera\u00e7\u00e3o foi neles, a ferramenta recusa e nada muda. Para voltar a capa, use set_document_fields com o valor em previous; para autores, use as ferramentas de autores.",
        "name": "undo_last_change",
        "title": "Desfazer a \u00faltima altera\u00e7\u00e3o"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": true,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Altera s\u00f3 os dados enviados de um autor. Sem affiliation_id a afilia\u00e7\u00e3o continua a mesma; affiliation_id null tira a afilia\u00e7\u00e3o.",
        "name": "update_author",
        "title": "Alterar autor"
      },
      {
        "annotations": {
          "destructiveHint": false,
          "openWorldHint": false,
          "readOnlyHint": true
        },
        "description": "Abre a pr\u00e9via do trabalho: p\u00e1ginas em imagem e sum\u00e1rio, que se atualizam sozinhas a cada altera\u00e7\u00e3o que voc\u00ea fizer. N\u00e3o gera o PDF para entregar (use generate_pdf no final). Chame uma vez para abrir a pr\u00e9via; depois n\u00e3o precisa chamar de novo.",
        "name": "view_document",
        "title": "Ver o trabalho (p\u00e1ginas e sum\u00e1rio)"
      },
      {
        "annotations": {
          "destructiveHint": true,
          "idempotentHint": false,
          "openWorldHint": false,
          "readOnlyHint": false
        },
        "description": "Escreve o texto de uma se\u00e7\u00e3o ou substitui diretamente o t\u00edtulo, subt\u00edtulo, resumo ou abstract do trabalho. Nas partes title, subtitle, abstract e abstract_translated, use somente mode \"replace\", sem title nem op\u00e7\u00f5es de se\u00e7\u00e3o: html substitui o campo inteiro, sem acrescentar t\u00edtulos. Nas demais partes, mode \"replace\" (padr\u00e3o) troca todo o conte\u00fado da se\u00e7\u00e3o existente com esse t\u00edtulo (o t\u00edtulo fica), inclusive as subse\u00e7\u00f5es dela: leia antes com read_section e mande de novo o que deve continuar, como as cita\u00e7\u00f5es j\u00e1 feitas e as subse\u00e7\u00f5es. Com mode \"create\", cria uma se\u00e7\u00e3o nova, depois de after_section_title ou no fim da parte. Mande em html par\u00e1grafos (<p>), listas, negrito e it\u00e1lico; o resto do trabalho n\u00e3o muda. Para citar, use depois cite_in_paragraph.",
        "name": "write_section",
        "title": "Escrever se\u00e7\u00e3o"
      }
    ]
  },
  "description": "Formata trabalhos acad\u00eamicos em ABNT e gera o PDF.",
  "icons": [
    {
      "mimeType": "image/png",
      "sizes": [
        "512x512"
      ],
      "src": "https://fastformat.co/.well-known/mcp/icon-512.png"
    },
    {
      "mimeType": "image/svg+xml",
      "sizes": [
        "any"
      ],
      "src": "https://fastformat.co/.well-known/mcp/icon.svg"
    }
  ],
  "name": "co.fastformat/mcp",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://fastformat.co/mcp"
    }
  ],
  "schemaVersion": "0.1",
  "serverInfo": {
    "description": "Formata trabalhos acad\u00eamicos (ABNT), cadastra refer\u00eancias conferidas e gera o PDF.",
    "name": "FastFormat",
    "version": "1.0.0"
  },
  "title": "FastFormat",
  "transports": [
    {
      "endpoint": "https://fastformat.co/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.0.0",
  "websiteUrl": "https://fastformat.co/"
}