# RFQdecoder

> Should-cost of a machined, sheet metal or cast part from its PDF, DXF or STEP drawing, line by line.

- name: io.github.Mounirt879/rfqdecoder
- version: 1.2.0
- connection class: R1 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 71/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.Mounirt879%2Frfqdecoder
- tools: https://api.protogrid.dev/v1/servers/io.github.Mounirt879%2Frfqdecoder/tools

**An agent can connect on its own if it already holds `RFQDECODER_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "rfqdecoder": {
      "type": "http",
      "url": "https://rfqdecoder.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ${RFQDECODER_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${RFQDECODER_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-100% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 71/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 7 of 7 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: deposer_plan (idempotentHint); chiffrer_piece (idempotentHint); recharger_credits (idempotentHint); …
- pass `tools.token_cost`: about 2,213 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 12 tool changes in 30 days
- fail `stability.rug_pull`: 7 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 2,213 tokens to load them all
- tool set hash: 7273952975d469525dd3e62fc6a63da1
- tools last changed: 2026-10-19T12:01:44.040Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.Mounirt879/rfqdecoder.svg)](https://protogrid.dev/servers/io.github.Mounirt879/rfqdecoder)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `verifier_devis` changed (description, inputSchema)
  - before: Use this when the user has a supplier quote for a part and wants to know if the price is fair. Compares the quoted price with the price rebuilt from the drawing, line by line, and lists the questions to ask the supplier. Requires a plan_id and the quoted unit price. 1 credit.
  - after: Use this when the user has a supplier quote for a part and wants to know if the price is fair. Compares the quoted price with the price rebuilt from the drawing, line by line, and lists the questions to ask the supplier. Requires a plan_id and the quoted unit price. 1 credit. The quote can be passed either as its unit price (devis.prix_unitaire_eur) or as the PDF file (devis.pdf_base64); with the PDF, the price, quantity and supplier are read automatically and returned in devis_lu.
- 2026-10-12 `calculer_taux_horaire` changed (inputSchema)
- 2026-10-11 `calculer_taux_horaire` changed (inputSchema)
- 2026-10-10 `recharger_credits` changed (description, inputSchema)
  - before: Use this only when the user asks to buy or top up estimates, or after an estimate failed because credits ran out and the user wants to continue. Returns a secure card payment page (Stripe) to give to the user: pack25 (25 estimates, EUR 15 excl. VAT), pack100 (100, EUR 50), pack500 (500, EUR 100), illimite (unlimited, EUR 200 per month). No payment happens inside the conversation; credits are added as soon as payment is confirmed. Free.
  - after: Use this only when the user asks to buy or top up estimates, or after an estimate failed because credits ran out and the user wants to continue. Returns a secure card payment page (Stripe) to give to the user: pack25 (25 estimates, EUR 15 excl. VAT), pack100 (100, EUR 50), illimite (unlimited, EUR 200 per month). No payment happens inside the conversation; credits are added as soon as payment is confirmed. Free.
- 2026-10-10 `recharger_credits` changed (title, description, annotations) **meaning changed**
  - before: Crée une page de paiement par carte pour recharger la clé (pack25 : 25 chiffrages 15 EUR HT, pack100 : 100 chiffrages 50 EUR HT, pack500 : 500 chiffrages 100 EUR HT, illimite : abonnement 200 EUR HT par mois). Rend url_paiement à transmettre à l'utilisateur humain ; les crédits arrivent dès le paiement confirmé. Gratuit.
  - after: Use this only when the user asks to buy or top up estimates, or after an estimate failed because credits ran out and the user wants to continue. Returns a secure card payment page (Stripe) to give to the user: pack25 (25 estimates, EUR 15 excl. VAT), pack100 (100, EUR 50), pack500 (500, EUR 100), illimite (unlimited, EUR 200 per month). No payment happens inside the conversation; credits are added as soon as payment is confirmed. Free.
- 2026-10-10 `consulter_usage` changed (title, description, annotations) **meaning changed**
  - before: Crédits restants, quotas et derniers appels de la clé.
  - after: Use this when the user asks how many estimates or credits remain, or what limits apply. Returns remaining credits, quotas and recent calls. Free, read-only.
- 2026-10-10 `verifier_devis` changed (title, description, annotations) **meaning changed**
  - before: Compare le prix d'un devis fournisseur au prix reconstruit depuis le plan, poste par poste, et liste les questions à poser. 1 unité.
  - after: Use this when the user has a supplier quote for a part and wants to know if the price is fair. Compares the quoted price with the price rebuilt from the drawing, line by line, and lists the questions to ask the supplier. Requires a plan_id and the quoted unit price. 1 credit.
- 2026-10-10 `calculer_taux_horaire` changed (title, description, annotations) **meaning changed**
  - before: Calcule le taux horaire d'une machine à partir de vos valeurs (gratuit), ou lit celui d'un poste de la base (1 unité).
  - after: Use this when the user asks for the hourly rate of a machine or workstation (CNC, laser, press, welding cell...). Computes it from the user's values (price, utilisation, labour, energy) for free, or reads a reference rate from the database (1 credit). Do not use for labour-only salary questions.
- 2026-10-10 `comparer_quantites` changed (title, description, annotations) **meaning changed**
  - before: Chiffre la même pièce pour plusieurs quantités (2 à 8) pour voir l'effet de la quantité sur le prix. 1 unité par quantité.
  - after: Use this when the user wants to see how the unit price of the same part changes with quantity (2 to 8 quantities, e.g. 50, 500, 5000). Returns one costed line per quantity. Do not use for a single quantity (use chiffrer_piece). 1 credit per quantity.
- 2026-10-10 `chiffrer_piece` changed (title, description, annotations) **meaning changed**
  - before: Chiffre une pièce usinée depuis un plan déposé : prix unitaire, chaque ligne (matière, opérations, frais, marge) avec son hypothèse, et ce qui n'est pas inclus. 1 unité.
  - after: Use this when the user asks what a manufactured part should cost (should-cost, target price, quote check) and a plan_id is available. Returns the unit price broken down line by line: material, each operation with machine and time, setups, overheads, margin, and what is not included. Requires material and quantity; ask the user if they are missing. Do not use for general price questions without a drawing. 1 credit.

Full history: https://api.protogrid.dev/v1/servers/io.github.Mounirt879%2Frfqdecoder/changes

## Remotes

- https://rfqdecoder.com/api/v1/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)
- https://rfqdecoder.com/api/mcp (streamable-http, auth api_key ${RFQDECODER_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `calculer_taux_horaire`: Use this when the user asks for the hourly rate of a machine or workstation (CNC, laser, press, welding cell...). Computes it from the user's values (price, utilisation, labour, energy) for free, or reads a reference rate from the database (1 credit). Do not use for labour-only salary questions.
- `chiffrer_piece`: Use this when the user asks what a manufactured part should cost (should-cost, target price, quote check) and a plan_id is available. Returns the unit price broken down line by line: material, each operation with machine and time, setups, overheads, margin, and what is not included. Requires material and quantity; ask the user if they are missing. Do not use for general price questions without a drawing. 1 credit.
- `comparer_quantites`: Use this when the user wants to see how the unit price of the same part changes with quantity (2 to 8 quantities, e.g. 50, 500, 5000). Returns one costed line per quantity. Do not use for a single quantity (use chiffrer_piece). 1 credit per quantity.
- `consulter_usage`: Use this when the user asks how many estimates or credits remain, or what limits apply. Returns remaining credits, quotas and recent calls. Free, read-only.
- `deposer_plan`: Use this when the user provides a technical drawing of a manufactured part (PDF, DXF or STEP, max 20 MB) that will be costed. Uploads the file (base64) and returns a plan_id plus the dimensions and features read from it. Do not use for photos, invoices or documents that are not part drawings. Free.
- `recharger_credits`: Use this only when the user asks to buy or top up estimates, or after an estimate failed because credits ran out and the user wants to continue. Returns a secure card payment page (Stripe) to give to the user: pack25 (25 estimates, EUR 15 excl. VAT), pack100 (100, EUR 50), illimite (unlimited, EUR 200 per month). No payment happens inside the conversation; credits are added as soon as payment is confirmed. Free.
- `verifier_devis`: Use this when the user has a supplier quote for a part and wants to know if the price is fair. Compares the quoted price with the price rebuilt from the drawing, line by line, and lists the questions to ask the supplier. Requires a plan_id and the quoted unit price. 1 credit. The quote can be passed either as its unit price (devis.prix_unitaire_eur) or as the PDF file (devis.pdf_base64); with the PDF, the price, quantity and supplier are read automatically and returned in devis_lu.
