> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doconda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo hacer que un agente del OpenAI Agents SDK entregue archivos

> Envuelve doconda.tools() en FunctionTool: tu agente crea Word, PowerPoint, Excel o PDF y responde con los enlaces de descarga.

Instala `openai-agents` y `doconda`, y envuelve cada herramienta de `doconda.tools()` en un `FunctionTool` (o conecta el
servidor MCP remoto con `MCPServerStreamableHttp`). El agente llama a `create_document` y su respuesta final trae los
enlaces al Word, PowerPoint, Excel o PDF que ha creado.

## Pasos

1. Guarda tu key de OpenAI en `OPENAI_API_KEY` y la de Doconda (panel → **API keys**) en `DOCONDA_API_KEY`.
2. Instala las dependencias: `pip install openai-agents doconda`.
3. Convierte las herramientas y lanza el agente:

```python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
import asyncio
import json

from agents import Agent, FunctionTool, Runner
from doconda import Doconda


def as_function_tool(t):
    async def invoke(ctx, args: str):
        return json.dumps(await asyncio.to_thread(t.run, json.loads(args)))

    return FunctionTool(
        name=t.name,
        description=t.description,
        params_json_schema=t.input_schema,
        on_invoke_tool=invoke,
        strict_json_schema=False,
    )


agent = Agent(
    name="Documentos",
    instructions="Crea los documentos que te pida el usuario y devuelve sus enlaces.",
    model="gpt-5",
    tools=[as_function_tool(t) for t in Doconda().tools()],
)

result = Runner.run_sync(agent, "Redacta un memo para el equipo: la oficina cierra el viernes")
print(result.final_output)
```

`strict_json_schema=False` porque el modo estricto marca todos los campos como obligatorios, y en Doconda casi todos
son opcionales (`prompt` o `markdown`, `style`, `name`…).

Con MCP, en vez de `FunctionTool`, pasa el servidor remoto en `mcp_servers` y sube la espera por llamada con
`client_session_timeout_seconds=300` (5 s por defecto): un documento tarda más en estar listo. El código está en la
[guía del Agents SDK](/agents/openai-agents#con-mcp).

## Qué devuelve

Cada llamada a `create_document` devuelve al agente un resumen corto:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "id": "doc_01JAB3…",
  "format": "docx",
  "status": "ready",
  "links": { "docx": "https://…", "pdf": "https://…" },
  "links_note": "Links expire in 5 minutes: call get_document for fresh ones."
}
```

* `format`: `docx`, `pdf`, `pptx`, `xlsx` o `artifact`. Word, PowerPoint y Excel llegan siempre con su PDF.
* `status`: `ready`, `ready_with_warnings`, `needs_review` o `failed` (no se cobra).
* Los enlaces caducan a los 5 minutos; el agente pide otros con `get_document`.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Puede el agente revisar o editar un archivo del usuario?">
    Sí. Tiene `upload_file`, `review_document` (arregla problemas sin tocar el contenido) y `edit_document` (cambia solo
    lo que se pide).
  </Accordion>

  <Accordion title="¿Por qué tarda la herramienta?">
    `create_document` espera a que el documento esté listo. Un documento sencillo tarda segundos; uno en calidad
    `standard`, unos minutos. Ver [niveles de calidad](/guides/create#niveles-de-calidad).
  </Accordion>

  <Accordion title="¿Cuánto cuesta?">
    Lo que hace el agente cuenta como si lo hicieras tú con la API: mismo proyecto, mismo precio. Ver
    [precios](/guides/account#precios).
  </Accordion>
</AccordionGroup>

## Sigue leyendo

* [OpenAI Agents SDK](/agents/openai-agents): la guía completa, también con MCP en local.
* [Quickstart](/quickstart).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.