MCP.Market

ZapSign MCP server

online · 100% uptime
by mcp-dir·io.github.mcp-dir/zapsign-mcp·v0.1.0

ZapSign electronic document signing via the official API: create documents for signature (from PDF,

B79/100grade B
What users say
No reviews yet
Be the first
Safety scan
B79/100

full report

Adoption
New

0 stars

Reviews

Write one

Nobody has reviewed ZapSign yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

ZapSign tools (35, 19 write)

write = sends, deletes, buys or posts
  • authenticateFree

    MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.

  • connectFree

    Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.

  • marketplaceFree

    The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.

  • report_bugFree

    Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

  • show_versionFree

    Show the current MCP platform and adapter versions.

  • toolkit_infoFree

    Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

  • zapsign_account_planFree

    Conta ZapSign (leitura). Ações: plan (info do plano: créditos, status, período); users (page — lista usuários da conta, 25/página). [Flattened action: plan]

  • zapsign_account_usersFree

    Conta ZapSign (leitura). Ações: plan (info do plano: créditos, status, período); users (page — lista usuários da conta, 25/página). [Flattened action: users]

  • zapsign_account_write_create_userwrite actionFree

    Gerenciar usuários da conta ZapSign. Ações: - create_user (data): adiciona usuário. Campos: email*; opc role (member|admin|self_docs_limited), first_name, last_name, phone_country, phone_number. - delete_user (email): remove usuário (donos não podem ser removidos). [Flattened action: create_user]

  • zapsign_account_write_delete_userwrite actionFree

    Gerenciar usuários da conta ZapSign. Ações: - create_user (data): adiciona usuário. Campos: email*; opc role (member|admin|self_docs_limited), first_name, last_name, phone_country, phone_number. - delete_user (email): remove usuário (donos não podem ser removidos). [Flattened action: delete_user]

  • zapsign_checks_getFree

    Verificação de antecedentes no ZapSign (leitura). Ação: get (check_id — status not_started|in_progress|delayed|error|completed + pdf_report). [Flattened action: get] Bulk support: accepts check_ids for batched execution.

  • zapsign_checks_write_createwrite actionFree

    Criar verificação de antecedentes no ZapSign (consome créditos). Ação: create (data). Campos: country* (BR|CO|CL|MX|PE), type* (ex.: person | credit_person_br), user_authorized: true*, e um identificador: national_id | foreign_id. [Flattened action: create]

  • zapsign_documents_getFree

    Documentos de assinatura no ZapSign (leitura). Ações: list (filtros: page, status pending|signed|refused, folder_path, deleted, signer_email, created_from/created_to YYYY-MM-DD, sort_order asc|desc, include_signers); get (doc_token — detalhe + signatários + extra_docs + URLs de arquivo, que expiram em 60min); signer_log (doc_token — trilha de auditoria; download_pdf=true retorna o PDF do log). [Flattened action: get]

  • zapsign_documents_listFree

    Documentos de assinatura no ZapSign (leitura). Ações: list (filtros: page, status pending|signed|refused, folder_path, deleted, signer_email, created_from/created_to YYYY-MM-DD, sort_order asc|desc, include_signers); get (doc_token — detalhe + signatários + extra_docs + URLs de arquivo, que expiram em 60min); signer_log (doc_token — trilha de auditoria; download_pdf=true retorna o PDF do log). [Flattened action: list]

  • zapsign_documents_signer_logFree

    Documentos de assinatura no ZapSign (leitura). Ações: list (filtros: page, status pending|signed|refused, folder_path, deleted, signer_email, created_from/created_to YYYY-MM-DD, sort_order asc|desc, include_signers); get (doc_token — detalhe + signatários + extra_docs + URLs de arquivo, que expiram em 60min); signer_log (doc_token — trilha de auditoria; download_pdf=true retorna o PDF do log). [Flattened action: signer_log]

  • zapsign_documents_write_add_extra_docwrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: add_extra_doc]

  • zapsign_documents_write_createwrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: create]

  • zapsign_documents_write_create_from_templatewrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: create_from_template]

  • zapsign_documents_write_deletewrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: delete]

  • zapsign_documents_write_place_signatureswrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: place_signatures]

  • zapsign_documents_write_refusewrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: refuse]

  • zapsign_documents_write_updatewrite actionFree

    Criar/alterar documentos de assinatura no ZapSign. Ações: - create (data): cria documento. Campos: name*, signers[]* (cada {name, email, phone_country, phone_number, auth_mode}); UMA fonte de arquivo: url_pdf | base64_pdf | url_docx | base64_docx | markdown_text; opc lang, disable_signer_emails, date_limit_to_sign, signature_order_active, folder_path, external_id. - create_from_template (data): cria via template. Campos: template_id*, signer_name*, data[]* (cada {de, para} substituindo {{VAR}}); opc signer_email, send_automatic_email, send_automatic_whatsapp, folder_path, external_id, lang. - update (doc_token, data): só com doc "em andamento". Campos: name, date_limit_to_sign, folder_path, extra_docs[]. - delete (doc_token): soft-delete. - refuse (data): cancela/recusa. Campos: doc_token*, rejected_reason*, notify_signer. - place_signatures (doc_token, data): posiciona assinaturas por coordenadas. Campo: rubricas[] ({signer_token, page 0-based, relative_position_left/bottom, relative_size_x/y, type signature|visto}). - add_extra_doc (doc_token, data): anexa PDF extra. Campos: name*, url_pdf | base64_pdf. [Flattened action: update]

  • zapsign_list_accountsFree

    Lista contas ZapSign vinculadas a este install — id e apelido.

  • zapsign_signers_getFree

    Signatários no ZapSign (leitura). Ação: get (signer_token — status, sign_url, visualizações, geo, auth_mode etc.). [Flattened action: get]

  • zapsign_signers_write_addwrite actionFree

    Gerenciar signatários no ZapSign. Ações: - add (doc_token, data): adiciona signatário. Campos: name*, email*; opc phone_country, phone_number, auth_mode (assinaturaTela|tokenEmail|tokenSms|tokenWhatsapp), lock_name/email/phone, qualification, send_automatic_email, send_automatic_whatsapp, require_document_photo. - update (signer_token, data): atualiza (só antes de assinar) ou reenvia lembrete. Mesmos campos de add. - remove (signer_token): remove (não pode remover quem já assinou nem o único signatário). - sign (data): assina em lote via API (assíncrono). Campos: signer_tokens[]*; opc selfie_photo, document_photo_url. (user_token é injetado automaticamente.) [Flattened action: add]

  • zapsign_signers_write_removewrite actionFree

    Gerenciar signatários no ZapSign. Ações: - add (doc_token, data): adiciona signatário. Campos: name*, email*; opc phone_country, phone_number, auth_mode (assinaturaTela|tokenEmail|tokenSms|tokenWhatsapp), lock_name/email/phone, qualification, send_automatic_email, send_automatic_whatsapp, require_document_photo. - update (signer_token, data): atualiza (só antes de assinar) ou reenvia lembrete. Mesmos campos de add. - remove (signer_token): remove (não pode remover quem já assinou nem o único signatário). - sign (data): assina em lote via API (assíncrono). Campos: signer_tokens[]*; opc selfie_photo, document_photo_url. (user_token é injetado automaticamente.) [Flattened action: remove]

  • zapsign_signers_write_signwrite actionFree

    Gerenciar signatários no ZapSign. Ações: - add (doc_token, data): adiciona signatário. Campos: name*, email*; opc phone_country, phone_number, auth_mode (assinaturaTela|tokenEmail|tokenSms|tokenWhatsapp), lock_name/email/phone, qualification, send_automatic_email, send_automatic_whatsapp, require_document_photo. - update (signer_token, data): atualiza (só antes de assinar) ou reenvia lembrete. Mesmos campos de add. - remove (signer_token): remove (não pode remover quem já assinou nem o único signatário). - sign (data): assina em lote via API (assíncrono). Campos: signer_tokens[]*; opc selfie_photo, document_photo_url. (user_token é injetado automaticamente.) [Flattened action: sign]

  • zapsign_signers_write_updatewrite actionFree

    Gerenciar signatários no ZapSign. Ações: - add (doc_token, data): adiciona signatário. Campos: name*, email*; opc phone_country, phone_number, auth_mode (assinaturaTela|tokenEmail|tokenSms|tokenWhatsapp), lock_name/email/phone, qualification, send_automatic_email, send_automatic_whatsapp, require_document_photo. - update (signer_token, data): atualiza (só antes de assinar) ou reenvia lembrete. Mesmos campos de add. - remove (signer_token): remove (não pode remover quem já assinou nem o único signatário). - sign (data): assina em lote via API (assíncrono). Campos: signer_tokens[]*; opc selfie_photo, document_photo_url. (user_token é injetado automaticamente.) [Flattened action: update]

  • zapsign_templates_getFree

    Templates (modelos DOCX) no ZapSign (leitura). Ações: list (page — 20/página); get (template_token — inclui inputs[] das variáveis {{VAR}}). [Flattened action: get]

  • zapsign_templates_listFree

    Templates (modelos DOCX) no ZapSign (leitura). Ações: list (page — 20/página); get (template_token — inclui inputs[] das variáveis {{VAR}}). [Flattened action: list]

  • zapsign_templates_write_createwrite actionFree

    Gerenciar templates no ZapSign. Ações: - create (data): cria template DOCX. Campos: name*, docx_url | base64_docx*; opc first_signer{}, lang, observers[], folder_path/folder_token, redirect_link. - update (template_token, data): metadados (o DOCX em si é imutável). Campos: name, lang, observers[], first_signer, folder_path/token, redirect_link. - delete (template_token): irreversível. [Flattened action: create]

  • zapsign_templates_write_deletewrite actionFree

    Gerenciar templates no ZapSign. Ações: - create (data): cria template DOCX. Campos: name*, docx_url | base64_docx*; opc first_signer{}, lang, observers[], folder_path/folder_token, redirect_link. - update (template_token, data): metadados (o DOCX em si é imutável). Campos: name, lang, observers[], first_signer, folder_path/token, redirect_link. - delete (template_token): irreversível. [Flattened action: delete]

  • zapsign_templates_write_updatewrite actionFree

    Gerenciar templates no ZapSign. Ações: - create (data): cria template DOCX. Campos: name*, docx_url | base64_docx*; opc first_signer{}, lang, observers[], folder_path/folder_token, redirect_link. - update (template_token, data): metadados (o DOCX em si é imutável). Campos: name, lang, observers[], first_signer, folder_path/token, redirect_link. - delete (template_token): irreversível. [Flattened action: update]

  • zapsign_webhooks_write_createwrite actionFree

    Gerenciar webhooks no ZapSign (não há endpoint de listagem na API). Ações: - create (data): cria webhook (1 por conta cobre todos os docs). Campos: url*; opc type ("" = todos | doc_signed | doc_created | doc_deleted | ...), doc_token, headers. Retorna {id}. - delete (id): remove webhook pelo id retornado na criação. [Flattened action: create] Bulk support: accepts ids for batched execution.

  • zapsign_webhooks_write_deletewrite actionFree

    Gerenciar webhooks no ZapSign (não há endpoint de listagem na API). Ações: - create (data): cria webhook (1 por conta cobre todos os docs). Campos: url*; opc type ("" = todos | doc_signed | doc_created | doc_deleted | ...), doc_token, headers. Retorna {id}. - delete (id): remove webhook pelo id retornado na criação. [Flattened action: delete] Bulk support: accepts ids for batched execution.

Public scan report

scanner v0.1.10 · 2026-11-01 · same rubric, same numbers if you re-run it

1 high
  • –Code scanremote-only server, no package to scann/a
  • Live reliabilityremote reachable in 1878ms20/20
  • Tool poisoning35 tool descriptions checked15/15
  • Auth qualityopen endpoint exposes 19 write-action tools with no auth3/15
  • Maintenancelast push 63 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year9/10

Findings (1)

  • highWrite-action tools reachable without authenticationauth.open-write
Overall 79/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How ZapSign compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
79/100
higher than 58% of 48,255 servers
Tools
35
the typical server has 7
Tools that change things
54%
typical: 0%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote server answers 100%
Response time
90 ms
faster than 86% of 30,031 servers

What its tools let an agent do: 15 read · 20 change

Install ZapSign in Claude Code, Cursor or VS Code

claude mcp add --transport http zapsign-mcp https://api.mcp.ai/p_zapsign
Add to Cursor

What the publisher says

From the ZapSign repository's README, as published. We do not edit it. Read it on GitHub

ZapSign

ZapSign para Claude, ChatGPT e agentes de IA

Assinatura eletrônica de documentos ZapSign via API oficial: criar documentos para assinatura (de PDF, DOCX, URL ou template), acompanhar status, gerenciar signatários e autenticação, templates, webhooks, verificação de antecedentes e plano da conta. Gere seu API Token no painel em Configurações → Integrações → ZAPSIGN API.

  • 📊 29 ferramentas
  • ✏️ Leitura e escrita
  • 💬 Funciona com qualquer cliente MCP: Claude Desktop, Cursor, VS Code, Cline, Continue
  • 🔑 Login via magic-link (sem senha)

English version · Documentação completa · Skill pra agentes

Instalar em 1 clique

Claude (Web e Desktop)

A Anthropic unificou a instalação de MCPs em claude.ai/customize/connectors. O mesmo link serve pra Claude Web e Claude Desktop (basta estar logado):

➕ Abrir no Claude e conectar

Manual (se o deeplink não abrir): claude.ai/customize/connectors → + → Adicionar conector personalizado → cole Nome ZapSign e URL https://api.mcp.ai/p_zapsign.

Cursor

➕ Instalar ZapSign no Cursor

VS Code (Copilot Chat)

➕ Instalar ZapSign no VS Code

ChatGPT, Manus, OpenClaw e mais 40+ clientes

Funciona em qualquer cliente MCP que suporte MCP over HTTP. A URL do servidor é sempre:

https://api.mcp.ai/p_zapsign

Detalhes por cliente: INSTALL.md.

Exemplos de uso

Crie um documento para assinatura a partir deste PDF e adicione o signatário João (joao@email.com)
Liste os documentos pendentes de assinatura
Qual o status de assinatura do documento X?

29 ferramentas disponíveis

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

ZapSign: common questions

Is ZapSign MCP server safe?
Mostly: it is graded B (79/100). Read the ZapSign safety report
How do I install ZapSign?
It runs remotely at api.mcp.ai. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does ZapSign need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is ZapSign maintained?
The last commit was 66 days ago (2026-08-30). The latest release is v0.1.0.
Is ZapSign up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
What can I use instead of ZapSign?
Servers from other publishers that do the same job: kordoc MCP server.
How does ZapSign compare with other MCP servers?
safety score 79/100 (higher than 58% of 48,255 servers); tools 35 (the typical server has 7); tools that change things 54% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to ZapSign

Same job from other publishers: the closest match first, then the best rated.

  • kordoc
    Parse Korean documents (HWP, HWPX, PDF, XLSX, DOCX, PPTX) to Markdown; fill forms, diff, render.
    A

More from mcp-dir →