LastFolk MCP by usefulapi

Price, dispatch, track and cancel same-day courier deliveries in LastFolk.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
98%
Integridad del esquema
72%
Calidad de los nombres
98%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'lastfolk_update_billing_profile' name length outside 3-30 rangeen lastfolk_update_billing_profile

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,090Tokens (definiciones de herramientas)
~2.6 KBTamaño de respuesta típico
Impacto significativo en la atención (2.41% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "lastfolk": {
      "url": "https://lastfolk.usefulapi.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://lastfolk.usefulapi.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (9)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢lastfolk_whoami

Show which LastFolk tenant and environment (sandbox or production) this API key belongs to, plus the key prefix and last four characters. Use it to confirm the key works. GET /v1/whoami.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lastfolk_check_environment

Check that the API key environment matches the connected courier provider account, before any delivery is created. Returns match: true when they agree. A mismatch is an error. GET /v1/environment.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lastfolk_create_quote(pickup, dropoff, manifest)

Price a pickup-to-dropoff delivery and get a quote_id. Reserves nothing and charges nothing. The quote is single-use and expires at expires_at; pass quote_id to lastfolk_create_delivery before then. Price amounts are decimal strings: never parse them as floats. POST /v1/quotes.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "pickup": {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "description": "Full human-readable address line. Shown in LastFolk surfaces."
        },
        "street_address": {
          "type": "string",
          "description": "Street line ONLY: no city and no country."
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "ISO 3166-1 alpha-2 country code, for example CL. Required: it is never inferred."
        },
        "state": {
          "description": "Subdivision, where the country uses one.",
          "type": "string"
        },
        "postal_code": {
          "type": "string"
        },
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "details": {
          "description": "Apartment, floor, access notes.",
          "type": "string"
        }
      },
      "required": [
        "address",
        "street_address",
        "city",
        "country"
      ],
      "description": "Where the courier collects the order."
    },
    "dropoff": {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "description": "Full human-readable address line. Shown in LastFolk surfaces."
        },
        "street_address": {
          "type": "string",
          "description": "Street line ONLY: no city and no country."
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "ISO 3166-1 alpha-2 country code, for example CL. Required: it is never inferred."
        },
        "state": {
          "description": "Subdivision, where the country uses one.",
          "type": "string"
        },
        "postal_code": {
          "type": "string"
        },
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "details": {
          "description": "Apartment, floor, access notes.",
          "type": "string"
        }
      },
      "required": [
        "address",
        "street_address",
        "city",
        "country"
      ],
      "description": "Where the courier delivers the order."
    },
    "manifest": {
      "description": "Optional declared contents of the shipment.",
      "type": "object",
      "properties": {
        "items": {
          "minItems": 1,
          "maxItems": 45,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 120
              },
              "quantity": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "weight": {
                "description": "Per-unit weight in GRAMS.",
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "dimensions": {
                "type": "object",
                "properties": {
                  "length": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  },
                  "height": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  },
                  "depth": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  }
                },
                "required": [
                  "length",
                  "height",
                  "depth"
                ]
              },
              "price": {
                "description": "Per-unit price in subunits x100 of the order currency (CLP 12.500 is 1250000).",
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "must_be_upright": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "description": "Declared lines. Aggregate lines instead of one line per unit."
        },
        "total_value": {
          "description": "Declared goods value in subunits x100 of the order currency.",
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "items"
      ]
    }
  },
  "required": [
    "pickup",
    "dropoff"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lastfolk_list_deliveries(status, external_order_id, created_after, created_before, limit, ...)

List your deliveries, newest first, with status, tracking URL and ETAs. Filter by status, your external_order_id, or a created date range. Page with next_cursor. The dropoff PIN is not in lists: use lastfolk_get_delivery. GET /v1/deliveries.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only these statuses. Repeat values to match several.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pending",
          "dispatched",
          "pickup",
          "in_transit",
          "delivered",
          "cancelled",
          "failed",
          "returned"
        ]
      }
    },
    "external_order_id": {
      "description": "Your own order id. Not unique: returns every match.",
      "type": "string"
    },
    "created_after": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "ISO 8601 date-time, for example 2026-11-01T09:00:00Z."
    },
    "created_before": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "ISO 8601 date-time, for example 2026-11-01T09:00:00Z."
    },
    "limit": {
      "description": "Page size, 1 to 100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "next_cursor from the previous page. Pass it back unchanged.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lastfolk_get_delivery(delivery_id)

Read one delivery: status, tracking URL, ETAs, timestamps, and the dropoff verification_pin the recipient gives the courier. The PIN is a secret: share it only with the recipient. GET /v1/deliveries/{delivery_id}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "delivery_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "The delivery_id returned when the delivery was created."
    }
  },
  "required": [
    "delivery_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lastfolk_create_delivery(quote_id, idempotency_key, external_order_id, dropoff, customer_email, ...)

DISPATCHES a real courier job against a quote_id from lastfolk_create_quote, and starts the billing for it. The quote must be unused and not expired. Use a unique idempotency_key per delivery (an order id works): a retry with the same key and body returns the original delivery and never dispatches a second courier. The same key with a different body is refused. dropoff.phone must be a real, reachable number. POST /v1/deliveries.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "quote_id from lastfolk_create_quote. Single-use."
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Unique per delivery attempt, 1 to 255 characters, sent as the Idempotency-Key header. An order id works."
    },
    "external_order_id": {
      "description": "Your own order reference. Echoed on the delivery and in webhooks.",
      "type": "string"
    },
    "dropoff": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Recipient name."
        },
        "phone": {
          "type": "string",
          "pattern": "^\\+[1-9]\\d{6,14}$",
          "description": "Recipient phone, E.164. The courier calls this number."
        }
      },
      "required": [
        "name",
        "phone"
      ],
      "description": "Recipient contact."
    },
    "customer_email": {
      "type": "string"
    },
    "pickup_notes": {
      "description": "Instructions for the courier at pickup.",
      "type": "string"
    },
    "manifest": {
      "description": "Optional declared contents of the shipment.",
      "type": "object",
      "properties": {
        "items": {
          "minItems": 1,
          "maxItems": 45,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 120
              },
              "quantity": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "weight": {
                "description": "Per-unit weight in GRAMS.",
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "dimensions": {
                "type": "object",
                "properties": {
                  "length": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  },
                  "height": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  },
                  "depth": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "description": "Centimeters."
                  }
                },
                "required": [
                  "length",
                  "height",
                  "depth"
                ]
              },
              "price": {
                "description": "Per-unit price in subunits x100 of the order currency (CLP 12.500 is 1250000).",
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "must_be_upright": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "description": "Declared lines. Aggregate lines instead of one line per unit."
        },
        "total_value": {
          "description": "Declared goods value in subunits x100 of the order currency.",
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "items"
      ]
    }
  },
  "required": [
    "quote_id",
    "idempotency_key",
    "dropoff"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lastfolk_cancel_delivery(delivery_id)

Cancel a delivery that the courier has not collected yet (status pending or pickup). Cancelling a delivery that is already cancelled succeeds with changed: false. After pickup, the API refuses with delivery_not_cancellable. Cancelling moves no money in the same call. POST /v1/deliveries/{delivery_id}/cancel.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "delivery_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "The delivery to cancel."
    }
  },
  "required": [
    "delivery_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢lastfolk_get_billing_profile

Read the account's fiscal identity: legal company name, tax ID and type, and billing address. Exactly seven fields, each text or null. GET /v1/billing-profile.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴lastfolk_update_billing_profile(legal_company_name, tax_id, tax_id_type, billing_address_street, billing_address_city, ...)

Change the account's fiscal identity. Fields you omit or send empty keep their stored value. Send null to clear one field. The tax ID is checked against the resulting billing country, and the whole update is refused if it fails. Changes flow to billing records and invoices. PUT /v1/billing-profile.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "legal_company_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "tax_id": {
      "type": [
        "string",
        "null"
      ]
    },
    "tax_id_type": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "VAT",
            "RUT",
            "RFC",
            "EIN",
            "CUIT",
            "NIT",
            "OTHER"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "billing_address_street": {
      "type": [
        "string",
        "null"
      ]
    },
    "billing_address_city": {
      "type": [
        "string",
        "null"
      ]
    },
    "billing_address_postal_code": {
      "type": [
        "string",
        "null"
      ]
    },
    "billing_address_country": {
      "description": "ISO 3166-1 alpha-2 country code.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada9 herramientas