Skip to main content
Glama

MCP-OIDC4VCI

MCP를 활용한 AI 지원 검증 가능 자격 증명 발급

이 프로젝트는 **Model Context Protocol(MCP)**을 사용하여 OpenID for Verifiable Credential Issuance(OIDC4VCI) 생태계의 기능을 AI 에이전트에 노출하는 방법을 탐구합니다. OIDC4VCI 1.0(최종 명세)을 대상으로 합니다.

목표는 지갑을 대체하거나, LLM에게 개인 키 또는 무제한 자격 증명에 대한 접근 권한을 부여하는 것이 아닙니다. 대신, 이 프로젝트는 보다 제한된 아키텍처를 조사합니다.

MCP 서버는 OIDC4VCI 자격 증명 발급 흐름을 이해하고 진행하기 위한 에이전트 대면 오케스트레이션 계층으로 작동하며, 보안에 민감한 작업은 지갑 또는 자격 증명 보유자와 같은 전용 컴포넌트의 통제 하에 유지됩니다.

프로젝트는 구체적인 시나리오에서 출발합니다.

사용자가 OIDC4VCI 자격 증명 제안(Credential Offer)을 받았고, AI 에이전트가 무엇이 제안되었는지 이해하고 발급 프로세스를 안내하거나 오케스트레이션하도록 돕기를 원합니다.


동기

OIDC4VCI는 지갑 또는 자격 증명 보유자에게 검증 가능한 자격 증명을 발급하기 위한 프로토콜을 정의합니다. 일반적인 흐름에는 자격 증명 제안, 자격 증명 발급자와 그 메타데이터, 인증 서버, 인가 또는 사전 인가 흐름, 자격 증명 요청, 증명 및 암호화 키 바인딩, 자격 증명 전달 및 저장이 포함됩니다. 이는 사용자가 스스로 파악하기에 상당히 많은 양의 구조화된 정보입니다.

AI 에이전트는 자격 증명 제안을 이해하고, 무엇이 제공되는지 설명하고, 지원되는 자격 증명 구성을 발견하고, 필요한 발급 흐름을 결정하고, 다음에 필요한 것이 무엇인지 식별하며, 민감하지 않은 프로토콜 상호 작용을 오케스트레이션함으로써 잠재적으로 도움을 줄 수 있습니다.

이 프로젝트가 탐구하는 핵심 질문은 다음과 같습니다.

지갑과 암호화 키 자료의 보안 경계를 훼손하지 않으면서 OIDC4VCI 기능을 MCP를 통해 AI 에이전트에 어떻게 노출할 수 있을까?

전체 시스템 설계는 Architecture를 참조하세요. 계획된 구축 범위와 현재 범위는 Roadmap을 참조하세요.


Related MCP server: Cheqd MCP Toolkit

아키텍처 개요

   AI Agent ──MCP──▶ OIDC4VCI MCP Server ──▶ Credential Issuer / Authorization Server
                              │
                              ▼
                       Wallet Boundary
                              │
                              ▼
              Key Management / Proofs / User Authorization

MCP 서버는 AI 에이전트와 OIDC4VCI 생태계 사이의 중개자 역할을 합니다. 자동으로 지갑이 되어서는 안 됩니다. 민감한 작업(키, 증명, 동의)은 명시적인 지갑 경계 뒤에 유지되며, 절대 LLM 컨텍스트에 포함되지 않습니다.

전체 세부 사항, 컴포넌트 책임, 데이터 흐름, 도구 계약 및 보안 요구 사항은 docs/ARCHITECTURE.md에 있습니다.


프로젝트 상태

초기 단계입니다. 아키텍처와 MVP 범위는 docs/ARCHITECTURE.mddocs/ROADMAP.md에 초안이 작성되어 있습니다.

1단계 (MCP 자격 증명 제안 검사기) — 완료. inspect_credential_offer는 자격 증명 제안을 값 또는 참조(credential_offer_uri)로 확인하고, OIDC4VCI 1.0에 대해 검증한 다음, 발급자, 요청된 자격 증명 구성 ID 및 승인(grant)을 반환합니다. src/mcp_oidc4vci/credential_offer.py를 참조하세요.

2단계 (메타데이터 검색) — 완료. get_credential_issuer_metadata는 자격 증명 발급자의 well-known 엔드포인트에서 메타데이터를 가져와 검증하고(명세에 따라 발급자 식별자의 경로 구성 요소 앞에 well-known 경로 세그먼트를 올바르게 삽입), 반환된 credential_issuer가 요청된 것과 일치하는지 확인한 다음, 자격 증명 엔드포인트, 인증 서버 및 지원되는 자격 증명 구성을 반환합니다. src/mcp_oidc4vci/credential_issuer_metadata.py를 참조하세요.

3단계 (발급 흐름 엔진) — 완료. describe_issuance_flow, initiate_issuance, get_issuance_status는 인메모리 IssuanceSessionStore 위에 구현됩니다. 사전 인가 코드 승인의 경우 initiate_issuance는 실제 토큰 요청을 완료합니다(RFC 8414를 통한 OAuth 인증 서버 검색 후 토큰 교환). 인가 코드 승인의 경우 waiting_for_user_authorization에서 중지되는데, 해당 흐름을 완료하려면 지갑 주도 리디렉션이 필요하며 4단계에서도 다루지 않기 때문입니다(아래 참조). src/mcp_oidc4vci/issuance.py, src/mcp_oidc4vci/authorization_server_metadata.py, src/mcp_oidc4vci/token_request.py를 참조하세요.

4단계 (지갑 경계) — 완료 (범위 축소). WalletAdapter(generate_proofreceive_credential이 있는 Protocol)와 MockWalletAdapter는 새로운 request_credential 도구를 뒷받침하며, ready_for_credential_request 세션에 대한 자격 증명 요청을 완료합니다: 발급자 메타데이터를 가져오고, 발급자가 필요로 하는 경우 새 nonce를 얻고, 지갑에 서명된 증명(실제 EC 서명된 openid4vci-proof+jwt, 이 서버에서 서명하지 않음)을 요청하고, 이를 POST한 다음, 발급된 자격 증명을 지갑에 전달합니다. 자격 증명 내용은 에이전트에게 도달하지 않습니다. 사전 인가 코드 승인은 이제 종단 간 작동합니다. src/mcp_oidc4vci/wallet.py, src/mcp_oidc4vci/credential_request.py, src/mcp_oidc4vci/nonce.py를 참조하세요.

공유 데이터 모델은 src/mcp_oidc4vci/models.py에 있으며, 테스트는 tests/에 있습니다(99% 커버리지, 124개 테스트).


기술 스택

  • Python — 구현 언어.

  • uv — 의존성 관리, 가상 환경 및 프로젝트 실행.

  • FastMCP — MCP 서버와 도구를 구축하기 위한 고수준 Python 프레임워크.

  • MCP Python SDK — FastMCP가 기반으로 하는 공식 프로토콜 SDK.

  • MCP Inspector — 개발 중 MCP 서버 도구를 테스트하고 디버깅하기 위한 대화형 도구.


시작하기

# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

# Run the MCP server through the MCP Inspector for interactive testing
uv run fastmcp dev inspector src/mcp_oidc4vci/server.py:mcp

# Lint, type-check, and run the test suite
uv run ruff check .
uv run mypy src
uv run pytest

문서

  • Architecture — 컴포넌트, 설계 원칙, 지갑 경계, 데이터 흐름, MCP 도구 계약, 보안 요구 사항.

  • Roadmap — MVP 범위, 개발 단계, 비목표, 성공 기준, 향후 확장.

Available Tools

6 tools
describe_issuance_flowB

Describe the steps required to obtain the credential(s) offered by a Credential Offer.

Resolves the offer and returns which grant-based flow applies and its ordered steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
credential_offerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for disclosing behavior. It states that the tool 'resolves' the offer and returns the applicable flow, which implies a read/analysis operation rather than a mutating one. It does not address side effects, permissions, or edge cases, but the 'Describe' framing makes the operation's non-destructive nature reasonably clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is two short sentences with no waste; the first sentence states the purpose and the second adds detail about the output (grant-based flow and ordered steps). It is concise and front-loaded, though the first sentence is slightly redundant with the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema, the description covers the core purpose and result well. However, it lacks explicit usage boundaries, mentions no sibling alternatives, and does not clarify the credential_offer input format. Without annotations, these gaps leave the agent with some uncertainty about when and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the only parameter, so the descrition must compensate. It mentions that the input relates to a 'Credential Offer', but it does not explain the expected string format, encoding, source, or any constraints on credential_offer. This is insufficient for an agent to confidently construct the parameter value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Describe' and names the resource: the issuance flow for a Credential Offer. It further clarifies the output by saying it returns which grant-based flow applies and its ordered steps. However, it does not explicitly differentiate this from sibling tools like inspect_credential_offer or initiate_issuance, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the agent needs the ordered steps to obtain credentials from an offer, but it does not explicitly state when to use this tool instead of siblings such as inspect_credential_offer, initiate_issuance, or request_credential. It offers no exclusions, prerequisites, or alternative-routing guidance, so the usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credential_issuer_metadataA

Fetch and validate a Credential Issuer's metadata from its well-known endpoint.

Returns the issuer's credential endpoint, authorization servers, and the credential configurations it supports.

ParametersJSON Schema
NameRequiredDescriptionDefault
credential_issuerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses that the tool fetches over a well-known endpoint and performs validation, and it states the returned data. However, it does not clarify what 'validate' means in practice, what happens on invalid metadata, or whether any external network/auth considerations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The main action is front-loaded, and the return-value sentence adds necessary detail without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and an output schema, and the description covers the core action and returned fields. It is incomplete regarding parameter format and validation failure behavior, but for a basic metadata fetch it is close to adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for the undocumented 'credential_issuer' parameter. The description implies the parameter identifies the issuer whose metadata is fetched, but it never explicitly explains the expected format (e.g., URL, identifier). This is enough for a single obvious parameter but not fully explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch and validate') and names the resource ('Credential Issuer's metadata') plus the well-known endpoint location. It also lists the concrete return contents (credential endpoint, authorization servers, credential configurations), which clearly distinguishes this tool from siblings like get_issuance_status or inspect_credential_offer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when you need issuer metadata), but it gives no explicit guidance, no contexts to avoid, and does not mention any sibling alternative. An agent must infer usage from the tool name and general purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issuance_statusB

Return the current state of a previously started issuance session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. 'Return the current state' signals a read-only status check, which is the main behavioral trait, but it does not explain what happens for invalid or expired session IDs, or whether the state is refreshed or cached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the action and resource. Every word contributes meaning, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter status lookup, the description is minimally adequate, especially since an output schema exists. However, it lacks explicit guidance on where session_id comes from, when to call the tool, and how errors are surfaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only indirectly references the session parameter by saying 'previously started issuance session.' It does not explicitly state that session_id is the identifier returned from initiate_issuance, nor describe its format or expected provenance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and resource ('current state of a previously started issuance session'), making the tool's core purpose unambiguous. It is distinct from siblings like initiate_issuance and request_credential, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'previously started' implies the tool should only be used after an issuance session has been initiated, which gives some contextual guidance. However, it does not explicitly state when to use this tool versus alternatives or mention related tools like inspect_credential_offer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

initiate_issuanceA

Start an issuance session for a Credential Offer.

For the pre-authorized code grant, completes the token exchange immediately and the session ends ready_for_credential_request or failed. For the authorization code grant, the session is left waiting_for_user_authorization, since completing it requires a wallet-driven redirect not yet implemented. tx_code is the transaction code obtained from the user out-of-band, if the offer requires one.

ParametersJSON Schema
NameRequiredDescriptionDefault
tx_codeNo
credential_offerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses immediate token exchange for pre-authorized grants, terminal states ready_for_credential_request or failed, the waiting_for_user_authorization state for the authorization code grant, the unimplemented redirect, and the out-of-band nature of tx_code.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three focused sentences, front-loaded with the action and then expanding only into necessary flow-specific behavior. Every sentence adds operational value, with no filler or repetition of schema types.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex issuance flow, the description covers the two grant types, their outcomes, the current implementation limitation, and the tx_code input. Since an output schema exists, return-value details are already handled outside the description, and nothing essential to invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions, so the description must compensate. It explains tx_code well ('transaction code obtained from the user out-of-band, if the offer requires one'), but credential_offer remains only implicitly defined as the offer that starts the session, with no format or origin details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Start an issuance session for a Credential Offer.' It further clarifies the operation by describing distinct grant-type behaviors and resulting session states, making it unmistakable from siblings like get_issuance_status or request_credential.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by saying 'Start an issuance session' and details what happens for each grant type, but it never explicitly contrasts with sibling tools or states when not to use it. The guidance is mostly behavioral rather than decision-oriented, leaving alternatives unmentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_credential_offerA

Parse and validate an OIDC4VCI Credential Offer URI.

Resolves the offer (by value or by reference) and returns its Credential Issuer, requested credential configuration IDs, and available grants.

ParametersJSON Schema
NameRequiredDescriptionDefault
credential_offerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral burden. It does disclose useful behavior: it resolves the offer 'by value or by reference' and returns specific data. But it says nothing about validation failure modes, networking behavior, or side effects, which matters for a resolve/validate operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main action is front-loaded, and the second sentence adds the behavioral and output details an agent needs. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only one parameter and an output schema, so the return shape is already covered. The description adds the key resolution distinction and output highlights. Minor gaps are validation behavior and explicit exclusions, but overall an agent can invoke this correctly with the information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only says credential_offer is a string. The description compensates by explaining it is a Credential Offer URI and that it can be resolved by value or by reference, giving the agent meaningful semantic context for the sole parameter beyond the raw type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Parse and validate an OIDC4VCI Credential Offer URI') and then lists the concrete outputs (Credential Issuer, configuration IDs, grants). This makes it clearly distinct from the sibling issuance-and-status tools, which focus on different stages of the protocol.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended trigger is inferrable: an agent should use this when it has an OIDC4VCI Credential Offer URI to inspect. However, the description never explicitly says when to prefer this over siblings or when not to use it, so the usage guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_credentialA

Complete the Credential Request for a session that has an access token.

Generates a key proof of possession through the wallet adapter — this server never signs anything itself — and hands the issued credential to the wallet for safekeeping. Its contents are never returned to the agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full transparency burden. It discloses the proof-of-possession generation through the wallet adapter, the server's deliberate non-signing role, and the critical constraint that the issued credential's contents are never returned to the agent. These are non-obvious behaviors an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first names the action and precondition, the second adds the key behavioral details. Every clause carries information; no filler or repetition. It is well front-loaded for an agent scanning the tool list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema, the description covers the main action, important side effects, and the session precondition. It does not explicitly place itself in the issuance flow relative to siblings, but the access-token condition and 'completes' wording give enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must supply parameter meaning. It adds that session_id refers to a session that already has an access token, which is useful, but it does not say where that session_id comes from (e.g., initiate_issuance) or provide format/source details. This is minimal compensation for a schema with a bare string parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Complete the Credential Request for a session that has an access token.' It also clarifies the outcome (credential handed to wallet) and highlights a distinguishing behavior (server never signs; contents never returned), which sets it apart from sibling inspection and initiation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states a clear precondition — the session must already have an access token — which implicitly tells the agent when in the flow to call it. It does not explicitly compare it against siblings like get_issuance_status or inspect_credential_offer, so it misses the full 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.8/5.0
Disambiguation4/5

Each tool targets a distinct phase of the OIDC4VCI flow, but inspect_credential_offer and describe_issuance_flow both resolve an offer and could be confused by an agent deciding whether to inspect contents or get next steps. The remaining tools have clearly separate boundaries.

Naming Consistency5/5

All six tools use a consistent snake_case verb_noun pattern, e.g. get_, inspect_, describe_, initiate_, and request_. There is no casing or verb-style mixing, making the set highly predictable.

Tool Count5/5

Six tools is well-scoped for an OIDC4VCI issuance server, covering offer inspection, metadata, flow analysis, initiation, status, and credential request. Each tool earns its place with no redundant or superfluous additions.

Completeness3/5

The toolset covers the pre-authorized code issuance path well, but the authorization-code grant is left in waiting_for_user_authorization with no tool to complete the user-authorization redirect or exchange the authorization code. This is a notable dead end for standard OIDC4VCI authorization-code flows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to securely use Open Agent ID credentials for signing requests, looking up agent data, and exchanging encrypted messages. It performs all cryptographic operations within the server process to ensure private keys are never exposed to the AI agent.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely manage decentralized identities, verifiable credentials, and trust registries on the Cheqd network via the Model Context Protocol.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with a DID-based identity, secure wallet, and cloud KMS-backed signing keys, enabling trusted interactions with persons, companies, and other agents via standards like OIDC4VCI, OIDC4VP, and SD-JWT.
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bernatmarcilla/mcp-oidc4vci'

If you have feedback or need assistance with the MCP directory API, please join our Discord server