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

# Recursos MCP

> Los cuatro documentos de referencia que ofrece el servidor MCP de muveya: qué contiene cada uno, quién puede leerlo y qué omite.

Además de las herramientas, el servidor MCP de muveya ofrece cuatro **recursos**: documentos JSON que un asistente puede leer para entender tus datos antes de responder. Un cliente los lista con `resources/list` y lee uno con `resources/read` y su URI. Cada lectura devuelve un elemento cuyo `mimeType` es `application/json` y cuyo `text` es el documento JSON.

| URI | Nombre | Título | Quién puede leerlo con OAuth |
| - | - | - | - |
| `muveya://help/error-codes` | `error-codes` | Error code catalog | Cualquier conexión OAuth activa |
| `muveya://orders/status-model` | `orders-status-model` | Order status model | Cualquier conexión OAuth activa |
| `muveya://catalog/policies` | `catalog-policies` | Catalog policies | Cualquier conexión OAuth activa |
| `muveya://tenant/approval-policy-summary` | `approval-policy-summary` | Approval policy summary | Nunca: necesita `approvals.decide` |

Con OAuth, los títulos y las descripciones siguen el idioma solicitado.

Los tres primeros son **documentos de referencia**. No contienen datos de tu clínica dental: todas las conexiones reciben exactamente el mismo contenido, así que no necesitan scope. El cuarto se construye con la política de aprobación de tu clínica dental y está limitado a las personas que deciden aprobaciones.

Cada lectura, permitida o rechazada, queda en el registro de auditoría como `mcp.resource_read`, con la URI, quién llamó y el resultado. Consulta la sección Auditoría de [Servidor MCP](/docs/es/mcp/introduction).

## `muveya://help/error-codes`

**Error code catalog.** Todos los códigos de error estables que muveya puede devolver, con su estado HTTP y la URI que los nombra. Un asistente lo usa para explicar un error y decidir qué hacer según el `code`, nunca según el texto para personas.

| | |
| - | - |
| Restricción | Ninguna: cualquier conexión OAuth activa |
| Omisión de datos | Nada que omitir: el documento no tiene datos de tu clínica dental |

El documento es `{ errors }`, ordenado por `code`. Cada entrada tiene:

| Campo | Significado |
| - | - |
| `code` | El código estable, por ejemplo `orders.not_found`. |
| `status` | El estado HTTP que le corresponde, por ejemplo `404`. |
| `type` | La URI del campo `type` de un documento de problema: `https://docs.muveya.com/errors/` seguido del código. |

```json Extracto theme={null}
{
  "errors": [
    { "code": "api_keys.invalid", "status": 401, "type": "https://docs.muveya.com/errors/api_keys.invalid" },
    { "code": "common.forbidden", "status": 403, "type": "https://docs.muveya.com/errors/common.forbidden" },
    { "code": "orders.not_found", "status": 404, "type": "https://docs.muveya.com/errors/orders.not_found" }
  ]
}
```

El catálogo cubre todos los códigos del producto, incluidos los que solo pueden devolver la consola o la API `/v1`. Para saber qué significa cada código y cómo resolverlo, consulta [Errores](/docs/es/api-reference/errors) y [Solución de problemas](/docs/es/help/troubleshooting).

## `muveya://orders/status-model`

**Order status model.** El ciclo de vida del pedido: cada estado y cada transición permitida entre ellos. Un asistente lo usa para explicar en qué punto está un pedido y qué evento puede moverlo al siguiente.

| | |
| - | - |
| Restricción | Ninguna: cualquier conexión OAuth activa |
| Omisión de datos | Nada que omitir: el documento no tiene datos de tu clínica dental |

El documento es `{ statuses, transitions }`. `statuses` lista los 14 estados. Cada entrada de `transitions` tiene un `event`, los estados `from` desde los que puede partir y el único estado `to` al que lleva. Cualquier cambio que no esté en la lista se rechaza.

El documento solo trae los valores. Los significados de abajo son de esta página:

| Estado | Significado |
| - | - |
| `draft` | En preparación; todavía no se envió. |
| `submitted` | Enviado; se está aplicando la política de aprobación. |
| `pending_approval` | Esperando decisiones de aprobación. |
| `approved` | Aprobado, por personas o de forma automática cuando no se requería aprobación. |
| `rejected` | Rechazado. Final. |
| `cancelled` | Cancelado antes de una decisión. Final. |
| `allocated` | Existencias reservadas para el pedido. |
| `picking` | La preparación comenzó. |
| `dispatched` | Las cajas salieron de la bodega de origen. |
| `delivered` | Entrega confirmada sin excepción. |
| `exception` | Entrega confirmada con una excepción. |
| `received` | Recibido en el destino sin problemas. |
| `partially_fulfilled` | Recibido con una disputa (dañado, faltante o parcial). |
| `closed` | Cerrado por el destino cuando todas las líneas quedaron resueltas. Final. |

| `event` | `from` | `to` |
| - | - | - |
| `submit` | `draft` | `submitted` |
| `cancel` | `draft`, `submitted`, `pending_approval` | `cancelled` |
| `attach_plan` | `submitted` | `pending_approval` |
| `auto_approve` | `submitted` | `approved` |
| `approve` | `pending_approval` | `approved` |
| `reject` | `pending_approval` | `rejected` |
| `allocate` | `approved` | `allocated` |
| `pick` | `allocated` | `picking` |
| `dispatch` | `picking` | `dispatched` |
| `deliver` | `dispatched` | `delivered` |
| `fail_delivery` | `dispatched` | `exception` |
| `receive` | `delivered` | `received` |
| `partially_receive` | `delivered` | `partially_fulfilled` |
| `close` | `received`, `partially_fulfilled` | `closed` |

Un pedido en `exception` no se puede cerrar. Para la historia completa de cada paso, consulta [Crear y seguir pedidos](/docs/es/orders/create-and-track) y [Resumen de entregas](/docs/es/deliveries/overview).

## `muveya://catalog/policies`

**Catalog policies.** El vocabulario y las reglas del catálogo: unidades, criticidad, estados de insumo, indicadores de trazabilidad y cómo se omite el costo sin permiso. Un asistente lo usa para leer bien los resultados de `catalog.search`.

| | |
| - | - |
| Restricción | Ninguna: cualquier conexión OAuth activa |
| Omisión de datos | Nada que omitir: describe la regla del costo pero no contiene costos |

El documento es igual para todos:

```json theme={null}
{
  "units": ["unit", "box", "pack", "bottle", "ampoule", "milliliter", "liter", "gram", "kilogram", "pair", "kit"],
  "criticalities": ["low", "medium", "high"],
  "statuses": ["draft", "active", "inactive"],
  "settableStatuses": ["active", "inactive"],
  "orderableStatus": "active",
  "flags": [
    { "field": "tracksLot", "default": false },
    { "field": "tracksSerial", "default": false },
    { "field": "tracksExpiry", "default": false },
    { "field": "highValue", "default": false }
  ],
  "costRedaction": { "scope": "catalog.cost.read", "behavior": "absent-when-unauthorized" }
}
```

| Campo | Significado |
| - | - |
| `units` | Las unidades en las que se puede contar un insumo (`unitOfMeasure`). |
| `criticalities` | Los niveles de criticidad de un insumo. |
| `statuses` | Estados de un insumo. Un insumo nace en `draft`. |
| `settableStatuses` | Los estados a los que se puede mover un insumo: `active` o `inactive`. Un insumo nunca vuelve a `draft`. |
| `orderableStatus` | Solo se pueden pedir los insumos `active`. |
| `flags` | Los ajustes de sí o no de un insumo y su valor por defecto. `tracksLot`, `tracksSerial` y `tracksExpiry` deciden qué registra una caja y cómo se eligen las cajas al preparar; `highValue` alimenta la política de aprobación y una custodia más estricta. |
| `costRedaction` | Los campos de costo se omiten por completo salvo que quien lee tenga `catalog.cost.read` (el scope OAuth `catalog.cost:read`). |

Consulta [Insumos del catálogo](/docs/es/catalog/items) y [Costos](/docs/es/catalog/costs) para las reglas detrás de cada valor.

## `muveya://tenant/approval-policy-summary`

**Approval policy summary.** Un resumen versionado de la política de aprobación vigente de tu clínica dental: sus reglas, etapas y permisos requeridos, con los umbrales monetarios solo para quien puede ver el valor de los pedidos.

| | |
| - | - |
| Restricción | Permiso interno `approvals.decide`. Ningún scope OAuth lo otorga. |
| Con OAuth | Siempre se rechaza; no se lee nada |
| Omisión de datos | `minValue` y `maxValue` se omiten salvo que quien lee pueda ver el valor de los pedidos |

Como tiene restricción, una conexión OAuth actual recibe un error JSON-RPC en lugar del documento:

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 7,
  "error": {
    "code": -32600,
    "message": "MCP error -32600: Not authorized to read this resource",
    "data": { "code": "common.forbidden" }
  }
}
```

De todos modos aparece en `resources/list`. Para una persona con permiso para leerlo, algo que todavía no está disponible, el documento es `{ "configured": false, "rules": [] }` cuando no hay una política publicada, o `configured: true` con:

| Campo | Significado |
| - | - |
| `policyVersion`, `isCurrent`, `effectiveFrom`, `publishedBy` | Qué versión está vigente, desde cuándo y el id de quien la publicó. |
| `rules[].when` | Las condiciones de una regla: `categories`, `highValue`, `orderTypes` y los umbrales `minValue` y `maxValue` cuando quien lee puede verlos. Una condición ausente aplica a todo. |
| `rules[].require` | Lo que exige la regla: la etapa (`stage`), el permiso (`requiredScope`) que debe tener quien aprueba y `minApprovers`. |

Para ver o cambiar la política de aprobación hoy, usa la consola: consulta [Política de aprobación](/docs/es/orders/approval-policy).

## Errores al leer un recurso

Una lectura de recurso que falla devuelve un error JSON-RPC, no un resultado con `isError`:

| Situación | `error.code` | `error.message` | `error.data.code` |
| - | - | - | - |
| La conexión no tiene el permiso del recurso | `-32600` | `MCP error -32600: Not authorized to read this resource` | `common.forbidden` |
| Una regla de muveya rechazó la lectura | `-32600` | `MCP error -32600: The resource could not be read` | El código estable, por ejemplo `common.forbidden` |
| Algo falló del lado de muveya | `-32603` | `MCP error -32603: The resource could not be read` | `common.internal_error` |
| La URI no es ninguna de las cuatro anteriores | `-32602` | `MCP error -32602: Resource` seguido de la URI y `not found` | No aparece |

## Páginas relacionadas

<CardGroup cols={2}>
  <Card title="Servidor MCP" icon="plug" href="/docs/es/mcp/introduction">
    Scopes, omisión de datos, auditoría y errores.
  </Card>

  <Card title="Herramientas MCP" icon="wrench" href="/docs/es/mcp/tools">
    Las diez herramientas de lectura y lo que devuelven.
  </Card>

  <Card title="Conectar un cliente" icon="link" href="/docs/es/mcp/connect">
    Configura tu asistente y prueba el endpoint.
  </Card>

  <Card title="Errores" icon="triangle-exclamation" href="/docs/es/api-reference/errors">
    Qué significa cada código de error.
  </Card>
</CardGroup>


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