Connectar un client
Connecta Claude Code, Claude Desktop, el MCP Inspector o qualsevol client MCP al servidor MCP de Factuarea — amb OAuth 2.1 o una API key, i en mode de prova.
El servidor MCP de Factuarea parla Streamable HTTP a
https://mcp.factuarea.com. Qualsevol client compatible amb MCP es pot connectar fent servir
una de les dues credencials admeses:
- OAuth 2.1 — el client es registra a si mateix i l'usuari l'autoritza mitjançant una pantalla de consentiment. Ideal per a eines d'usuari final.
- API key — passes un Bearer token
fact_live_/fact_test_directament. Ideal per a les teves pròpies automatitzacions.
L'endpoint canònic és l'arrel del subdomini, https://mcp.factuarea.com. La
forma anterior amb ruta https://mcp.factuarea.com/mcp continua funcionant com a
àlies de compatibilitat.
Fas servir Claude Code? La configuració recomanada és el plugin oficial factuarea-mcp
— dues comandes i estàs connectat per OAuth, amb una skill d'orientació
inclosa. Consulta la guia dedicada del plugin de Claude Code.
Els passos manuals de sota són per a altres clients o configuracions headless.
Claude Code
El camí més senzill és el plugin de Claude Code — registra el servidor i inclou una skill d'orientació en una sola instal·lació. Si prefereixes connectar el servidor a mà, Claude Code també admet servidors MCP remots sobre HTTP amb OAuth integrat.
Amb OAuth
Afegeix el servidor
claude mcp add --transport http factuarea https://mcp.factuarea.comAutentica't
Dins de Claude Code, executa el slash command:
/mcpTria factuarea, selecciona Authenticate i el teu navegador obre la pantalla de consentiment. Selecciona l'empresa a la qual donar accés, l'entorn (live o test) i els scopes que vulguis permetre, i després confirma. Claude Code emmagatzema el token resultant i el renova automàticament.
Fes-lo servir
Demana a Claude que faci alguna cosa — "llista les meves factures vençudes en mode de prova" — i descobreix i crida les tools corresponents.
Amb una API key
Si prefereixes fer servir la teva pròpia clau (sense flux de consentiment), passa-la com un
header Authorization:
claude mcp add --transport http factuarea https://mcp.factuarea.com \
--header "Authorization: Bearer fact_test_xxxxxxxxxxxxxxxxxxxxxxxx"Els scopes de la clau determinen quines tools apareixen a tools/list. Una clau amb *
veu les 232 tools; una clau més restringida només veu les tools que cobreixen els seus scopes.
Claude Desktop
Claude Desktop es connecta a servidors remots
mitjançant el seu fitxer de configuració. Afegeix una entrada sota mcpServers:
{
"mcpServers": {
"factuarea": {
"type": "http",
"url": "https://mcp.factuarea.com"
}
}
}En el següent arrencament, Claude Desktop descobreix el servidor i et guia pel
flux de consentiment OAuth al teu navegador. Per fer servir una API key en lloc d'això, afegeix un
objecte headers:
{
"mcpServers": {
"factuarea": {
"type": "http",
"url": "https://mcp.factuarea.com",
"headers": {
"Authorization": "Bearer fact_test_xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}El fitxer de configuració es troba a
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o
%APPDATA%\Claude\claude_desktop_config.json (Windows). Reinicia l'app després
d'editar-lo.
MCP Inspector
El MCP Inspector és la manera més ràpida d'explorar el catàleg i cridar tools a mà mentre desenvolupes.
Arrenca'l
npx @modelcontextprotocol/inspectorConnecta
Configura Transport a Streamable HTTP i URL a
https://mcp.factuarea.com. Per a OAuth, l'Inspector executa el flux
d'autorització per tu. Per a una API key, afegeix un header
Authorization: Bearer fact_test_… sota Authentication.
Explora
Obre Tools → List Tools per veure totes les tools que la teva credencial pot abastar, inspecciona el seu esquema d'entrada i executa-la amb arguments d'exemple.
Qualsevol client MCP
El servidor segueix l'especificació MCP, així que qualsevol client conforme funciona. L'essencial:
- Endpoint —
https://mcp.factuarea.com(la forma amb ruta…/mcpés un àlies de compatibilitat) - Transport — Streamable HTTP
- Auth —
Authorization: Bearer <token>, on el token és una API key (fact_live_/fact_test_) o un access token d'OAuth 2.1 - Discovery — davant d'un
401, el servidor retorna un headerWWW-Authenticateque apunta a les seves Protected Resource Metadata (RFC 9728) perquè els clients trobin l'authorization server automàticament
El descobriment de tools està paginat; el servidor retorna el catàleg complet (fins a 200
tools) en una sola resposta tools/list per defecte, i respecta nextCursor si
el teu client pagina.
Autenticació
El servidor MCP accepta dos tipus de credencial al mateix
endpoint https://mcp.factuarea.com, per a dues audiències diferents. Totes dues arriben com a
Authorization: Bearer <token>; el servidor les distingeix per la
forma del token (fact_* → API key, qualsevol altra cosa → access token d'OAuth).
Política de canal
Aquesta és la regla més important de la superfície MCP:
| Canal | Qui | Com es trien els scopes | Tools accessibles |
|---|---|---|---|
| API key | El propietari del compte automatitzant la seva pròpia empresa | Tries els scopes en crear la clau — fins al super-scope * | 232 (tot) |
| OAuth 2.1 | Una app de tercers actuant en nom d'un usuari | L'usuari concedeix els scopes a la pantalla de consentiment, des d'un catàleg curat | 218 |
El model reflecteix el de GitHub: un personal access token (API key) és la credencial pròpia del propietari i pot tenir qualsevol permís, mentre que una OAuth app és externa i es limita a un conjunt verificat de scopes que l'usuari aprova explícitament.
Les 14 tools que una OAuth app mai pot abastar (només una API key pot) són les operacions fiscals i de privacitat més sensibles:
- Escriptures de VeriFactu (
verifactu:write) — 8 tools: registrar/reintentar/subsanar registres i esdeveniments de VeriFactu, pujar/activar/revocar certificats FNMT, actualitzar ajustos de VeriFactu. Toquen el compliment de l'AEAT i són exclusives del propietari. - Esborrament RGPD (
delivery_notes:gdpr_forget) — 1 tool: esborrar la PII d'auditoria de signatura (Art. 17). Privilegiada, només per a administradors. - FacturaE (FACe) (
facturae:read/facturae:write) — 5 tools: les operacions B2G de FACe. Els seus scopes encara no són al catàleg de consentiment OAuth, així que per ara són només per a API key.
Tota la resta — les 218 tools de lectura/escriptura/transició/enviament — està disponible per a tots dos canals. Consulta Scopes & permisos per veure el catàleg.
API keys
Una API key és un Bearer token opac vinculat a la teva empresa, creat al dashboard de desenvolupadors a Ajustos → Desenvolupadors → API Keys. El format i les regles són idèntics als de l'API REST:
fact_live_<24 alphanumeric characters> → production company
fact_test_<24 alphanumeric characters> → isolated sandbox companyEl prefix és la font de veritat de l'entorn — consulta Mode de prova. El secret es mostra només una vegada en la creació; el backend només emmagatzema un hash bcrypt. Passa'l al teu client MCP com a:
Authorization: Bearer fact_test_xxxxxxxxxxxxxxxxxxxxxxxxPer al cicle de vida complet de la clau — creació, scopes, rotació amb període de gràcia,
revocació, llista d'accés d'IPs, expires_at — consulta la
guia d'Autenticació canònica. Les claus es comparteixen entre les superfícies REST
i MCP.
OAuth 2.1
Per a apps de tercers, Factuarea és un OAuth 2.1 Authorization Server complet. És compatible amb Dynamic Client Registration, el flux d'authorization-code amb PKCE i la rotació de refresh-token. No cal pre-registre ni aprovació manual de l'app — un client es registra a si mateix i l'usuari l'autoritza. (Els clients interactius com Claude Code i el MCP Inspector executen tot aquest flux per tu; els passos de sota són per construir el teu propi client.)
Descobriment
Els clients descobreixen les capacitats del servidor a través d'endpoints de metadata estàndard
(sense prefix /api):
| Endpoint | RFC | Propòsit |
|---|---|---|
/.well-known/oauth-authorization-server | 8414 | Authorization Server Metadata — llista els endpoints authorize/token/register/introspect/revoke, els scopes admesos, code_challenge_methods_supported: ["S256"]. |
/.well-known/oauth-protected-resource | 9728 | Protected Resource Metadata — declara el recurs MCP i quin authorization server emet tokens vàlids. |
Quan una petició no autenticada abasta l'endpoint, el servidor respon 401
amb un header WWW-Authenticate: Bearer ..., resource_metadata="<url>" perquè els clients RFC
9728 trobin l'authorization server sense endevinar.
1. Dynamic Client Registration (RFC 7591)
Un client es registra a si mateix fent POST de la seva metadata; el servidor retorna un
client_id (i un client_secret per a clients confidencials):
curl -X POST https://mcp.factuarea.com/api/oauth/register \
-H "Content-Type: application/json" \
-d '{
"client_name": "My Invoicing Assistant",
"redirect_uris": ["https://myapp.example.com/callback"],
"token_endpoint_auth_method": "none"
}'Els clients públics (apps de navegador/natives) es registren amb
token_endpoint_auth_method: "none" i depenen de PKCE; els clients confidencials fan servir
client_secret_basic. El registre té un rate limit de 60 per minut per IP.
2. Autorització amb PKCE
Envia l'usuari a l'endpoint authorize amb un challenge PKCE
(code_challenge_method=S256 és l'únic mètode acceptat):
GET https://mcp.factuarea.com/api/oauth/authorize
?response_type=code
&client_id=<client_id>
&redirect_uri=https://myapp.example.com/callback
&scope=factuarea.read invoices.write
&state=<opaque>
&code_challenge=<base64url(sha256(verifier))>
&code_challenge_method=S256Això renderitza la pantalla de consentiment, on l'usuari:
- Tria l'empresa a la qual donar accés (un usuari pot pertànyer a diverses).
- Tria l'entorn — live (l'empresa real) o test (un sandbox aïllat), a l'estil Stripe. Test és opt-in; si és absent ⇒ live.
- Revisa i selecciona els scopes a concedir. Els scopes sensibles es marquen i no vénen pre-seleccionats.
En aprovar, el servidor redirigeix de tornada amb un code d'un sol ús (i el teu
state). Les operacions sensibles es filtren del catàleg que l'usuari pot
aprovar — consulta la política de canal.
3. Intercanvi de token
Intercanvia el code per un access token, enviant el verificador PKCE:
curl -X POST https://mcp.factuarea.com/api/oauth/token \
-d grant_type=authorization_code \
-d code=<code> \
-d redirect_uri=https://myapp.example.com/callback \
-d client_id=<client_id> \
-d code_verifier=<verifier>{
"access_token": "<opaque>",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "<opaque>",
"scope": "profile.read clients.read invoices.read invoices.write"
}El token persisteix els scopes expandits i de gra fi (les macros com
factuarea.read s'expandeixen en el moment de l'emissió). Fes servir l'access token com a
credencial Bearer. L'endpoint token té un rate limit de 60 per minut per (client,
IP) i requereix autenticació de client (HTTP Basic per a clients confidencials,
client_id al body per als públics).
4. Rotació de refresh-token
Els refresh tokens roten per família: cada refresh emet un nou access token i un nou refresh token, i invalida el que vas fer servir.
curl -X POST https://mcp.factuarea.com/api/oauth/token \
-d grant_type=refresh_token \
-d refresh_token=<refresh_token> \
-d client_id=<client_id>Si un refresh token es reutilitza (usat després de la rotació — el senyal clàssic d'una fuita), el servidor detecta la reutilització, revoca tota la família de tokens i llança una alerta de seguretat. Emmagatzema i fes servir sempre només el darrer refresh token.
Revocació i introspecció
| Endpoint | RFC | Propòsit |
|---|---|---|
POST /api/oauth/revoke | 7009 | Revoca un access o refresh token. |
POST /api/oauth/introspect | 7662 | Comprova si un token està actiu i llegeix els seus scopes/metadata. |
Tots dos requereixen autenticació de client. Els usuaris també poden revisar i revocar apps connectades des del dashboard de Factuarea, i a un administrador d'empresa que perd l'accés se li revoquen els tokens automàticament en la següent crida.
Mode de prova
El servidor MCP funciona contra els mateixos dos entorns que l'API REST — live (la teva empresa real) i test (un sandbox aïllat) — perquè puguis construir i validar una integració d'agent sense tocar dades de producció, l' AEAT ni les safates d'entrada dels teus clients.
Com selecciones el mode de prova depèn del canal:
| Canal | Com fer servir el mode de prova |
|---|---|
| API key | Autentica't amb una clau fact_test_. El prefix és la font de veritat — un token fact_test_ sempre opera sobre el sandbox. |
| OAuth 2.1 | A la pantalla de consentiment, tria l'entorn Test (a l'estil Stripe). Si és absent ⇒ live. El token emès queda vinculat a aquest entorn. |
Una credencial de test opera sobre una empresa sandbox dedicada — un bessó tècnic de la teva empresa real, aprovisionat automàticament i que hereta el seu pla, perquè el gating de mòdul/pla es comporti fidelment. L'aïllament és estructural (les dades de test i live viuen en empreses separades), i els efectes externs estan desactivats:
| Efecte | A live | A test |
|---|---|---|
| VeriFactu | El registre d'Alta es crea i es transmet a l'AEAT. | Es crea localment, però mai es transmet a l'AEAT. |
| Els emails de documents arriben als destinataris reals. | No s'entreguen als destinataris reals. | |
| Webhooks | Els esdeveniments subscrits s'entreguen als teus endpoints. | Es registren amb livemode: false, però no s'entreguen. |
| FACe (FacturaE) | Els enviaments es presenten al web service real de FACe. | Simulats — cap crida SOAP surt de Factuarea; el número de registre és sintètic (FACE-SANDBOX-*). |
Tota la resta es comporta exactament igual que en producció, i el conjunt complet de 232 tools
està disponible en tots dos entorns (subjecte als teus scopes i pla). Quan el teu
flux funcioni d'extrem a extrem, canvia a live: crea una clau fact_live_, o torna a executar el
flux de consentiment i selecciona l'entorn live.
Aquest és el mateix mecanisme de sandbox que l'API REST. Consulta la guia canònica Mode de prova & sandbox per saber com s'aprovisiona i es consulta l'empresa sandbox.
Plugin de Claude Code
Instal·la el plugin oficial factuarea-mcp per connectar Claude Code al servidor MCP de Factuarea amb una sola comanda — la configuració recomanada.
Catàleg de tools
Les 232 tools del MCP de Factuarea agrupades per domini, amb el scope que requereix cadascuna i la seva categoria de límit de peticions.