issue_credential
Issue verifiable credentials using W3C VC Data Model formats with validation for secure digital identity management in the HiveAuth ecosystem.
Instructions
Issue a new verifiable credential using HiveAuth. Supports both W3C VC Data Model 1.1 and 2.0 formats with comprehensive validation.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| credentialSubject | Yes | Credential subject data | |
| type | Yes | Array of credential types (e.g., ["VerifiableCredential", "EducationCredential"]) | |
| vcVersion | No | W3C VC Data Model version | 2.0 |
| expirationDate | No | ISO 8601 date string | |
| validUntil | No | ISO 8601 date string | |
| context | No | Additional JSON-LD contexts | |
| issuer | No | Custom issuer DID or object |
Implementation Reference
- src/tools/issueCredential.ts:8-84 (handler)The main handler function that executes the 'issue_credential' tool: validates input, calls HiveAuth API to issue VC, handles errors, and returns MCP CallToolResult.export async function issueCredential(args: any): Promise<CallToolResult> { // Validate and sanitize input const validation = validateAndSanitizeInput(IssueCredentialInputSchema, args, 'issue_credential'); if (!validation.success) { return createValidationErrorResult(validation.error!); } const data = validation.data!; const { credentialSubject, type, vcVersion = '2.0', expirationDate, validUntil, context, issuer } = data; const HIVEAUTH_API_BASE_URL = process.env.HIVEAUTH_API_BASE_URL || 'http://localhost:3000'; const ISSUE_ENDPOINT = `${HIVEAUTH_API_BASE_URL}/api/issue`; try { const payload: any = { credentialSubject, type, vcVersion }; // Add optional fields if provided if (expirationDate) { payload.expirationDate = expirationDate; } if (validUntil) { payload.validUntil = validUntil; } if (context) { payload.context = context; } if (issuer) { payload.issuer = issuer; } const response = await fetch(ISSUE_ENDPOINT, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); if (!response.ok) { const errorData = await response.json().catch(() => ({ message: response.statusText })); throw new Error(`Failed to issue credential: ${errorData.message}`); } const result = await response.json(); return { content: [ { type: 'text', text: `Successfully issued ${vcVersion === '2.0' ? 'VC 2.0' : 'VC 1.1'} credential with ID: ${result.credential?.id || 'unknown'}` }, { type: 'text', text: `\`\`\`json\n${JSON.stringify(result, null, 2)}\n\`\`\`` } ] }; } catch (error: any) { return { content: [ { type: 'text', text: `Failed to issue credential: ${error.message}` } ], isError: true }; } }
- src/schemas/toolSchemas.ts:91-99 (schema)Zod input schema for the 'issue_credential' tool defining credentialSubject, type, vcVersion, expirationDate, validUntil, context, and issuer.export const IssueCredentialInputSchema = z.object({ credentialSubject: CredentialSubjectSchema, type: CredentialTypeSchema, vcVersion: VCVersionSchema.optional(), expirationDate: ISO8601DateSchema.optional(), validUntil: ISO8601DateSchema.optional(), context: z.array(z.string()).optional().describe('Additional JSON-LD contexts'), issuer: z.union([z.string(), z.object({}).passthrough()]).optional().describe('Custom issuer DID or object') });
- src/utils/schemaConverter.ts:16-20 (registration)TOOL_DEFINITIONS entry registering 'issue_credential' tool metadata (name, description, inputSchema) used by createMCPTools() to generate MCP Tool objects.{ name: 'issue_credential', description: 'Issue a new verifiable credential using HiveAuth. Supports both W3C VC Data Model 1.1 and 2.0 formats with comprehensive validation.', inputSchema: TOOL_SCHEMAS.issue_credential },
- src/index.ts:83-85 (registration)Dispatch registration in MCP server's CallToolRequestSchema handler switch statement routing 'issue_credential' calls to the handler function.case 'issue_credential': return await issueCredential(args);
- src/schemas/toolSchemas.ts:178-178 (schema)TOOL_SCHEMAS mapping entry linking 'issue_credential' tool name to its input schema for schema lookup.issue_credential: IssueCredentialInputSchema,