DUAL MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port (default: 3100) | 3100 |
| TRANSPORT | No | stdio (default) or http | stdio |
| DUAL_API_KEY | No | API key for authentication | |
| DUAL_API_URL | No | API base URL (default: https://api.blockv-labs.io/v3) | https://api.blockv-labs.io/v3 |
| DUAL_ACCESS_TOKEN | No | JWT access token | |
| DUAL_REFRESH_TOKEN | No | JWT refresh token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| dual_loginA | Authenticate with email/phone and password. Returns JWT tokens for subsequent API calls. Sets auth automatically for this session. |
| dual_login_guestA | Create a guest session with limited permissions. No credentials required. |
| dual_registerA | Create a new wallet account. A verification code will be sent to the email/phone provided. |
| dual_register_verifyB | Complete registration by submitting the verification code sent to your email/phone. |
| dual_refresh_tokenA | Exchange a refresh token for a new access token. |
| dual_get_meA | Get the authenticated wallet's profile — ID, nickname, email, avatar, language, activation status. |
| dual_update_meA | Update the authenticated wallet's nickname, language, or avatar. |
| dual_get_walletB | Retrieve a wallet's public profile by its ID. |
| dual_reset_passwordA | Send a password reset code to the wallet's email/phone. |
| dual_reset_password_verifyB | Submit reset code and set a new password. |
| dual_list_organizationsA | List all organizations the authenticated wallet belongs to. Supports pagination and role filtering. |
| dual_create_organizationA | Create a new organization (multi-tenant workspace). Returns the org with its ID and FQDN. |
| dual_get_organizationB | Get organization details including members, roles, and account info. |
| dual_update_organizationB | Update an organization's name, description, or image. |
| dual_get_org_balanceB | Get the current balance and currency for an organization. |
| dual_list_org_membersB | List all members of an organization with their roles. |
| dual_add_org_memberB | Add a wallet as a member to an organization with a specific role. |
| dual_remove_org_memberA | Remove a member from an organization. |
| dual_list_org_rolesB | List all roles defined for an organization. |
| dual_create_org_roleB | Create a new role with specific permissions for an organization. |
| dual_list_templatesA | List token templates. Templates define the structure, properties, and actions of tokenized objects. Filter by prefix or FQDN. |
| dual_create_templateA | Create a new token template that defines the structure of tokenized objects. Specify the property schema, allowed actions, and access rules. Example: Create a "Reward Token" template with properties like points, expiry_date, and redeemable status. |
| dual_get_templateB | Get full details of a template including its property schema, actions, and factory config. |
| dual_update_templateA | Update a template's name, property schema, or access rules. |
| dual_delete_templateA | Permanently delete a template. This cannot be undone. |
| dual_list_template_variationsB | List all variations of a template. Variations are alternative configurations of the same template. |
| dual_create_template_variationB | Create a variation of an existing template with overridden properties. |
| dual_list_objectsA | List tokenized objects (asset instances). Objects are created from templates and owned by wallets. Filter by template, owner, FQDN, or geographic hash. Supports pagination. |
| dual_get_objectB | Get full details of a tokenized object — its properties, ownership, faces, actions, and metadata. |
| dual_update_objectB | Update the properties of a tokenized object. Only mutable properties can be changed. |
| dual_get_object_childrenB | Get child objects in a hierarchical object tree. |
| dual_get_object_parentsB | Get parent objects in a hierarchical object tree. |
| dual_get_object_activityA | Get the full activity/audit log for an object — all state changes, transfers, and action executions. |
| dual_search_objectsB | Search tokenized objects with filter criteria. Supports complex queries across all object properties. Example filters: { "template_id": "abc123", "properties.status": "active" } |
| dual_count_objectsA | Count objects matching filter criteria without returning the full objects. |
| dual_execute_actionA | Execute an action on a tokenized object via the Event Bus. Actions are the primary way to change object state. Examples: mint tokens, transfer ownership, redeem rewards, update status. The action_type must match a registered action type, and the object must belong to a template that allows it. |
| dual_batch_actionsA | Execute multiple actions atomically in a single batch. All actions succeed or all fail. Useful for complex operations like: mint + transfer + configure in one transaction. |
| dual_list_actionsB | List executed actions. Filter by action ID or template. |
| dual_get_actionB | Get full details of a specific executed action. |
| dual_list_action_typesA | List all registered action types. Action types define what operations can be performed on objects. |
| dual_create_action_typeA | Register a new action type with an optional JSON schema for payload validation. |
| dual_update_action_typeB | Update an action type's name, description, or payload schema. |
| dual_list_facesA | List face definitions. Faces are visual representations (images, 3D models, web views) attached to templates. |
| dual_create_faceB | Create a visual face for a template. Types: image, image_progress, image_policy, image_layered, 3d, web. |
| dual_get_faceB | Get details of a specific face. |
| dual_update_faceB | Update a face's display URL or type. |
| dual_delete_faceA | Delete a face definition. |
| dual_get_template_facesA | Get all faces associated with a specific template. |
| dual_upload_fileA | Upload a file to DUAL storage. Returns a public URL. Useful for template assets, face images, and attachments. |
| dual_get_fileB | Get a file's URL or content by its storage ID. |
| dual_delete_fileB | Delete a file from DUAL storage. |
| dual_get_template_assetsB | List all storage assets associated with a template. |
| dual_list_webhooksA | List all registered webhooks. Filter by type, template, action, or active status. |
| dual_create_webhookA | Register a webhook to receive real-time notifications when events occur on the platform. |
| dual_get_webhookB | Get details of a specific webhook. |
| dual_update_webhookB | Update a webhook's URL or active status. |
| dual_delete_webhookA | Delete a webhook subscription. |
| dual_test_webhookA | Send a test payload to a webhook endpoint to verify it's working. |
| dual_list_messagesA | List notification messages sent through the platform. |
| dual_send_notificationB | Send a notification message to one or more wallets using a message template. |
| dual_list_message_templatesB | List all notification message templates. |
| dual_create_message_templateB | Create a notification template with subject, body (with placeholders), and delivery channels. |
| dual_delete_message_templateB | Delete a message template. |
| dual_list_batchesB | List sequencer batches. Batches group multiple transactions for efficient on-chain anchoring via ZK-rollup. |
| dual_get_batchB | Get details of a sequencer batch including all contained transactions. |
| dual_list_checkpointsA | List ZK-rollup checkpoints. Each checkpoint contains a state root and proof that anchors batches to L1. |
| dual_get_checkpointA | Get a specific ZK-rollup checkpoint with its proof data and state roots. |
| dual_list_api_keysB | List all API keys for the authenticated wallet. |
| dual_create_api_keyA | Create a new API key for server-to-server integration. The key value is only shown once — save it immediately. |
| dual_delete_api_keyA | Permanently revoke and delete an API key. |
| dual_get_payment_configA | Get the platform's payment configuration — deposit addresses, supported tokens, and fee structure. |
| dual_list_depositsB | List deposit transactions. Filter by transaction hash, token, or token address. |
| dual_request_accessA | Request access to a gated platform feature. |
| dual_list_support_messagesC | List support messages. |
| dual_send_support_messageB | Send a support message to the DUAL team. |
| dual_public_list_templatesA | List publicly accessible templates. No authentication required. |
| dual_public_get_templateA | Get a public template's details. No authentication required. |
| dual_public_get_objectA | Get a public object's details. No authentication required. |
| dual_public_search_objectsA | Search publicly accessible objects. No authentication required. |
| dual_public_get_statsA | Get public platform statistics — total objects, templates, and wallets. No authentication required. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 80 tools
Most tools have distinct purposes, but there is significant overlap in some areas, such as multiple 'list' tools for different resources (e.g., dual_list_objects, dual_search_objects, dual_public_search_objects) and similar 'get' operations across entities, which could cause confusion. Descriptions help clarify, but the sheer number of tools increases ambiguity risk.
Tool names follow a consistent 'dual_verb_noun' pattern throughout, with clear action-object pairs (e.g., dual_create_template, dual_update_object). Minor deviations exist, like dual_get_me instead of dual_get_wallet_me, but overall naming is predictable and readable.
With 80 tools, the count is excessive for a single server, making it overwhelming and likely to cause agent confusion. While the domain (a multi-feature platform) is broad, this many tools suggests poor scoping and could be split into multiple focused servers for better usability.
The tool set provides comprehensive coverage for the platform's domain, including CRUD operations for templates, objects, organizations, and webhooks, plus authentication, notifications, and public access. No obvious gaps are present; it supports full lifecycle management and complex workflows like batch actions and search.