Serveur MCP
Le Model Context Protocol (MCP) permet aux agents IA et aux assistants d’IDE d’appeler des outils. Le serveur d’ecdsa.com leur donne accès aux opérations de l’API et aux catalogues de référence du site : un assistant peut ainsi vérifier une signature ou expliquer une erreur TLS au lieu de deviner.
Point de terminaison
https://ecdsa.com/api/mcpStreamable HTTP, sans état : aucune session, rien à installer. Tout client MCP qui se connecte à des serveurs distants fonctionne.
Aucune clé d’API nécessaire : chaque outil fonctionne de façon anonyme. Une fois lancées avec les comptes, les clés d’API feront passer les appels de la limite par IP à la limite propre à la clé.
Connecter un client
Claude Code
La première commande ajoute le serveur uniquement pour vous ; avec --scope project, il est inscrit dans le fichier .mcp.json du dépôt et fonctionne pour toute personne qui ouvre le projet.
claude mcp add --transport http ecdsa https://ecdsa.com/api/mcp
claude mcp add --transport http ecdsa --scope project https://ecdsa.com/api/mcp{
"mcpServers": {
"ecdsa": {
"type": "http",
"url": "https://ecdsa.com/api/mcp"
}
}
}Avec une clé d’API
À utiliser une fois les clés d’API disponibles. Ne mettez pas la clé dans des fichiers que vous commitez.
Ajoutez la clé dans la portée locale, où elle reste sur votre machine : une entrée locale remplace l’entrée partagée du même nom, uniquement pour vous.
claude mcp add --transport http ecdsa https://ecdsa.com/api/mcp \
--header "Authorization: Bearer ecdsa_live_…"Claude Desktop et claude.ai
Personnaliser → Connecteurs → Ajouter → Ajouter un connecteur personnalisé. URL https://ecdsa.com/api/mcp, authentification : aucune connexion. Les connecteurs sont liés à votre compte Claude : un connecteur ajouté sur claude.ai fonctionne donc aussi dans Claude Desktop ; l’offre gratuite autorise un connecteur personnalisé.
Avec une clé d’API
À utiliser une fois les clés d’API disponibles. Ne mettez pas la clé dans des fichiers que vous commitez.
Si la boîte de dialogue du connecteur permet d’ajouter des en-têtes de requête, ajoutez Authorization avec la valeur Bearer ecdsa_live_… ; si elle ne le permet pas encore, utilisez la passerelle stdio ci-dessous avec son option --header. Les connecteurs appellent depuis le cloud d’Anthropic : sans clé, tous leurs utilisateurs partagent donc un même budget par IP.
Cursor
Dans ~/.cursor/mcp.json pour tous les projets, ou dans .cursor/mcp.json pour un seul :
{
"mcpServers": {
"ecdsa": {
"url": "https://ecdsa.com/api/mcp"
}
}
}Avec une clé d’API
À utiliser une fois les clés d’API disponibles. Ne mettez pas la clé dans des fichiers que vous commitez.
Pour une clé, privilégiez le fichier global. Cursor renseigne ECDSA_API_KEY à partir de l’environnement : la variable doit donc être définie.
{
"mcpServers": {
"ecdsa": {
"url": "https://ecdsa.com/api/mcp",
"headers": {
"Authorization": "Bearer ${env:ECDSA_API_KEY}"
}
}
}
}VS Code
Dans le fichier .vscode/mcp.json de l’espace de travail, ou depuis la ligne de commande :
{
"servers": {
"ecdsa": {
"type": "http",
"url": "https://ecdsa.com/api/mcp"
}
}
}code --add-mcp '{"name":"ecdsa","type":"http","url":"https://ecdsa.com/api/mcp"}'Avec une clé d’API
À utiliser une fois les clés d’API disponibles. Ne mettez pas la clé dans des fichiers que vous commitez.
VS Code demande la clé au premier démarrage du serveur et la conserve dans son stockage de secrets.
{
"inputs": [
{
"type": "promptString",
"id": "ecdsa-api-key",
"description": "ecdsa.com API key",
"password": true
}
],
"servers": {
"ecdsa": {
"type": "http",
"url": "https://ecdsa.com/api/mcp",
"headers": {
"Authorization": "Bearer ${input:ecdsa-api-key}"
}
}
}
}Clients qui ne gèrent que stdio
Reliez-les au serveur distant avec mcp-remote :
{
"mcpServers": {
"ecdsa": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://ecdsa.com/api/mcp"
]
}
}
}Outils
Le serveur liste 11 outils, d’après son propre registre, lu ici directement : c’est la même liste que celle renvoyée par tools/list.
verify_signatureVerify an ECDSA signatureVerifies a signature over a message (or a precomputed digest) against a public key. Curves: P-256, P-384, P-521, secp256k1. Signature formats auto-detected: ASN.1 DER or raw r‖s, in hex, base64 or base64url. Public key formats: PEM SPKI ("PUBLIC KEY"), EC JWK, or a bare SEC1 point in hex/base64. A signature that simply does not verify returns valid: false with HTTP 200; only unparseable input yields 400.
Lecture seuleScope api · 1 unité de quota par appel avec une cléPOST/v1/verify
convert_signatureConvert a signature between DER and raw r‖sDecodes a signature (DER or raw, auto-detected; hex/base64/base64url) and returns both encodings plus r, s and the high-S flag. normalize: "low-s" replaces a high-S s with n − s. Warnings list DER canonicality deviations (BER lengths, missing 0x00 pads, trailing bytes) and curve-ambiguity notes.
Lecture seuleScope api · 1 unité de quota par appel avec une cléPOST/v1/convert
decode_jwtDecode a JWT (no signature check)Decodes a compact JWS token: header, payload, enriched exp/iat/nbf time claims and a classification of the algorithm. The signature is NOT verified — the response carries verified: false explicitly. Use /v1/jwt/verify to check ES* signatures.
Lecture seuleScope api · 1 unité de quota par appel avec une cléPOST/v1/jwt/decode
verify_jwtVerify an ES256/ES384/ES512 JWT signatureVerifies the token's ECDSA signature against a public key (PEM SPKI, EC JWK, or bare SEC1 point). Non-ECDSA algorithms (HS*, RS*, PS*, EdDSA, ES256K, none) return 400 with code unsupported_algorithm. A signature that fails verification returns valid: false with HTTP 200. Time claims are noted in explanations but do not affect valid.
Lecture seuleScope api · 1 unité de quota par appel avec une cléPOST/v1/jwt/verify
decode_certificateDecode an X.509 certificate or chainAccepts PEM (one or more CERTIFICATE blocks — a whole chain works) or a single DER certificate as base64/hex. Returns a structured summary per certificate — subject, issuer, validity, key and signature algorithms, SAN, key usage, fingerprint — plus assessments (weak hashes, expiry, CA/Browser Forum lifetime limits, post-quantum notes).
Lecture seuleScope api · 1 unité de quota par appel avec une cléPOST/v1/cert/decode
get_domain_healthTLS signature-health grade for a domainConnects to the domain on port 443, examines the served certificate chain, key and signature algorithms, protocol versions and lifetimes, and returns a letter grade with findings, plus the leaf certificate's expiry and key algorithm as structured fields. Results are cached for 1 hour. Only public DNS hostnames are accepted — IP addresses, single-label names and private/reserved addresses are refused. Extra rate limit: 10 requests/minute per IP. A fresh scan can take several seconds.
Lecture seule, se connecte à l’hôte que vous lui indiquezScope scan · 5 unités de quota par appel avec une cléGET/v1/health/{domain}
explain_errorExplain an error messageLooks up an error message from a cryptography, TLS, certificate, JWT, SSH, code-signing or Web3 library in the ecdsa.com error catalog (299 messages, reproduced against the libraries that print them) and returns what it means, its likely causes and step-by-step fixes with code. Paste the message as printed; a whole log excerpt or stack trace works too. Never include private keys or secrets: input containing a private key is refused.
Lecture seuleScope api · 1 unité de quota par appel avec une clé
lookup_oidLook up an object identifier (OID)Resolves an ASN.1 object identifier used in X.509 certificates, CSRs, CMS/PKCS#7, PKCS#8/#12 and post-quantum PKI against the ecdsa.com OID catalog (938 identifiers: curated, IANA SMI arcs, CCADB EV policies). Accepts a dotted OID, its DER encoding in hex, or a name such as prime256v1 or ecdsa-with-SHA256; returns the name, aliases, category, DER encoding, OpenSSL names and references. Unknown OIDs still get their DER encoding and nearest known ancestor.
Lecture seuleScope api · 1 unité de quota par appel avec une clé
lookup_algorithmLook up a cryptographic algorithm identifierResolves an algorithm identifier against the IANA registries for JOSE and COSE (algorithms, key types, curves), TLS (cipher suites, signature schemes, supported groups), SSH, DNSSEC and HPKE: what it is, its code point, recommendation status, parameters (curve, hash, key size), names in OpenSSL/GnuTLS/NSS and the defining RFCs. Accepts names (ES256, TLS_AES_128_GCM_SHA256, ECDHE-ECDSA-AES128-GCM-SHA256, ecdsa-sha2-nistp256, X25519MLKEM768) or code points (-7, 0x0403, 13); `registry` narrows the search.
Lecture seuleScope api · 1 unité de quota par appel avec une clé
lookup_curveLook up an elliptic curveDescribes a named elliptic curve from the ecdsa.com curve catalog (54 curves, each checked arithmetically): its names in every standard (SEC 2, NIST, ANSI X9.62, JOSE/COSE, SSH, TLS), OIDs with DER encoding, domain parameters, security level, status (recommended to broken) and where it is used. Accepts any spelling — P-256, secp256r1, prime256v1, nistp256, X25519, Ed25519, brainpoolP256r1 — or the curve's OID.
Lecture seuleScope api · 1 unité de quota par appel avec une clé
glossaryDefine a cryptography termDefines a term from the ecdsa.com glossary (302 terms on signatures, JOSE, PKI, TLS, email authentication, Web3, post-quantum cryptography, identity and supply chain): a one-sentence definition, the explanation from the term's page, references to the standards and related terms, tools and errors.
Lecture seuleScope api · 1 unité de quota par appel avec une clé
Limites
Les appels anonymes partagent le budget de l’API REST : 60 requêtes par minute et par IP, plus 10 par minute pour get_domain_health, dont les analyses réelles puisent aussi dans les budgets d’analyse partagés. Les clients hébergés (les connecteurs de claude.ai et de Claude Desktop) appellent depuis le cloud d’Anthropic : leurs utilisateurs sont donc décomptés sur le même budget par IP, et un usage intensif déclenche rate_limited.
Clés privées
Les arguments qui contiennent des données de clé privée (un bloc PEM PRIVATE KEY, une clé OpenSSH, SSH2 ou PuTTY, une JWK avec « d ») sont refusés avec private_key_rejected avant tout autre traitement, exactement comme sur l’API REST. Les arguments ne sont jamais journalisés.