MCP server for the public Dynamsoft offerings: Barcode Reader, Dynamic Web TWAIN, Document Viewer, MRZ, and MDS. Includes guidance for choosing the right public product by workflow.
This MCP server demonstrates solid definition quality with comprehensive tool descriptions and clear parameter documentation. All 6 tools have detailed descriptions (200-600+ chars) that explicitly state WHEN TO USE and WHEN NOT TO USE, which is excellent for agent guidance. Tool names are verb-based and semantically clear (get_index, search, list_samples, get_sample_files, get_quickstart, resolve_version). Parameter schemas are present and typed for all tools. However, there are notable gaps: (1) Output schemas are not explicitly documented in the visible source, descriptions mention RETURNS but actual JSON Schema output definitions are not visible in the provided code sample, (2) some tools accept many optional parameters but do not document interdependencies clearly (e.g., in get_sample_files, resource_uri vs sample_id behavior), (3) error handling guidance is absent from tool descriptions. The tool composition is excellent, each tool has a single clear purpose and tools chain together logically (get_index → search/list_samples → get_sample_files). Tool naming conventions are consistent and discoverable.
Get a compact index of the public Dynamsoft offerings, editions, platforms, versions, and available docs/samples. WHEN TO USE: - As the first call in any conversation to discover what is available. - To determine valid product/edition/platform combinations before calling other tools. Note: Choose DBR for barcode-only workflows, MRZ for machine-readable-zone (passport/ID card) workflows, and MDS for document scan and normalization workflows. - To get public product-selection guidance (DBR for barcode-only; MRZ for machine-readable-zone workflows; MDS for document scan and normalization workflows). WHEN NOT TO USE: - Do not call get_index repeatedly; the index is static within a session. - If you already know the product/edition/platform, skip directly to search or get_quickstart. RETURNS: A JSON object with top-level keys: productSelection and products. productSelection contains guidance for choosing between public offerings, and products contains per-product entries (dbr, dwt, ddv, mrz, mds) with editions, platforms, latest versions, and counts of available docs and samples. PARAMETERS: None. EXAMPLE WORKFLOW: 1. Call get_index to discover available products. 2. Use the returned product/edition/platform values in search, list_samples, or get_quickstart. RELATED TOOLS: search (find specific resources), list_samples (browse samples), resolve_version (get exact version numbers).
Get an opinionated quickstart with installation instructions and working sample code for a target product/edition/platform. WHEN TO USE: - When the user wants to get started quickly with a Dynamsoft SDK. - To generate a ready-to-run code snippet with install commands, license key, and SDK version. - For scenario-specific starters: pass scenario='MRZ' for passport reading, 'document scan' for document normalization, or barcode/image hints for DBR. WHEN NOT TO USE: - If the user wants full project files (multiple source files, build configs), use get_sample_files instead. - If the user wants to browse available samples first, use search or list_samples. - If the user only needs version info, use resolve_version. PARAMETERS: - product (required): dbr, dwt, ddv, mrz, or mds. - edition: core, mobile, web, or server. Note: DBR editions are core (C++, Java, etc.), mobile (Android, iOS, etc.), web (JavaScript, TypeScript, etc.), and server/desktop (Python, .NET, C++, etc.). Other products span only one edition in this MCP: DWT/DDV are web-only; MRZ and MDS are web-only in this MCP (mobile and server versions available as reference documentation links). Inferred from platform if omitted. - platform: only DBR spans multiple platforms (android, ios, js, python, cpp, java, dotnet, nodejs, react, vue, angular, flutter, react-native, maui, etc.). For other products: DWT/DDV are web/JavaScript-only; omit platform or use 'web' or 'js'. - language: kotlin, java, swift, js, ts, python, cpp, csharp, react, vue, angular. Helps select the best sample variant. - version: Version constraint. Latest major is used by default. - api_level: API level applies only to DBR mobile: 'high-level' or 'low-level'. For all other products, do not include api_level. - scenario: MRZ, document scan, camera, image, single, multiple, react, vue, angular, etc. DBR web defaults to foundational guidance; MRZ and MDS return public workflow guidance where available. RETURNS: A formatted text block with SDK version, trial license key, install commands, and sample code. Ready to copy-paste. RELATED TOOLS: search (find specific docs or samples), get_sample_files (get full multi-file project), resolve_version (version numbers only).
Output schemas are not explicitly documented. Tool descriptions mention RETURNS in prose but no formal JSON Schema definitions are visible for tool responses. The rubric requires 'Document the output schema. LLMs need to know what fields to expect.' This forces LLMs to infer response structure from text descriptions.
Parameter interdependencies are documented in prose but not formalized in schema. For example, get_sample_files accepts both 'sample_id' and 'resource_uri' with a stated preference for 'resource_uri when available', but this constraint is not expressed as JSON Schema composition or explicit parameter constraints. This can cause LLM confusion when both are provided.
Error handling guidance is absent. Tool descriptions do not explain what errors can occur, how to recover, or what the LLM should do next if a call fails (e.g., 'sample not found', 'invalid product/edition/platform combination').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 75 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 64 | - | v1 |
Get the full project files for a known sample and return them inline as text. WHEN TO USE: - When you have a sample_id (from list_samples) or a sample:// resource_uri (from search) and need the complete source code. - When the user wants to see or scaffold a full sample project (multiple files, build configs, manifests). WHEN NOT TO USE: - If you do not have a sample_id or resource_uri yet, call list_samples or search first to discover one. - For doc:// URIs, use resources/read instead (this tool only handles sample:// URIs). - If the user just wants a quick code snippet, use get_quickstart instead. PARAMETERS: - product (required): dbr, dwt, ddv, mrz, or mds. - edition: mobile, web, or server. Note: DBR editions are core (C++, Java, etc.), mobile (Android, iOS, etc.), web (JavaScript, TypeScript, etc.), and server/desktop (Python, .NET, C++, etc.). Other products span only one edition in this MCP: DWT/DDV are web-only; MRZ and MDS are web-only in this MCP (mobile and server versions available as reference documentation links). - platform: only DBR spans multiple platforms (android, ios, js, python, cpp, java, dotnet, nodejs, react, vue, angular, flutter, react-native, maui, etc.). For other products: DWT/DDV are web/JavaScript-only; omit platform or use 'web' or 'js'. - version: Version constraint. Latest major is used by default. - sample_id: Sample identifier as returned by list_samples (e.g. 'hello-world', 'ScanSingleBarcode'). Requires product/edition. - resource_uri: A sample:// URI as returned by search (e.g. 'sample://dbr/mobile/android/10/high-level/ScanSingleBarcode' or 'sample://mrz/server/python/3/mrz_scanner'). Preferred over sample_id when available. - api_level: API level applies only to DBR mobile: 'high-level' or 'low-level'. For all other products, do not include api_level. RETURNS: A text block containing all project files inline, each under a heading with its relative path and wrapped in a fenced code block. Files larger than 50KB are excluded. No zip file is created. EXAMPLE: get_sample_files with resource_uri='sample://dbr/mobile/android/10/high-level/ScanSingleBarcode' returns all source files for the Android barcode scanning sample. RELATED TOOLS: list_samples (discover sample IDs), search (find samples by keyword), get_quickstart (quick single-file snippet).
List all available sample IDs and URIs for a given product/edition/platform scope. WHEN TO USE: - To browse the full catalog of samples available for a product/edition/platform. - To discover sample IDs before calling get_sample_files. - When the user wants to see what samples exist without a specific keyword. - Use MRZ for passport and machine-readable-zone workflows, and MDS for document scan and normalization workflows. WHEN NOT TO USE: - If you have a specific keyword or topic, use search instead (it ranks results by relevance). - If you already have a sample ID or URI, go directly to get_sample_files. PARAMETERS: - product: dbr, dwt, ddv, mrz, or mds. Omit to list across all public offerings. - edition: core, mobile, web, or server. Note: DBR editions are core (C++, Java, etc.), mobile (Android, iOS, etc.), web (JavaScript, TypeScript, etc.), and server/desktop (Python, .NET, C++, etc.). Other products span only one edition in this MCP: DWT/DDV are web-only; MRZ and MDS are web-only in this MCP (mobile and server versions available as reference documentation links). Omit to list across all editions. - platform: only DBR spans multiple platforms (android, ios, js, python, cpp, java, dotnet, nodejs, react, vue, angular, flutter, react-native, maui, etc.). For other products: DWT/DDV are web/JavaScript-only; omit platform or use 'web' or 'js'. - limit: 1-200 (default 50). Max number of results. RETURNS: A single text content item that starts with totals and plain URIs, then appends 'JSON:' followed by a JSON object with total count and sample entries. Each entry includes sample_id, uri (sample:// URI), product, edition, platform, version, title, and summary. Use sample_id or uri with get_sample_files to retrieve full project files. EXAMPLE: Call list_samples with product='dbr', edition='mobile', platform='android' to see all Android barcode reader samples. RELATED TOOLS: search (keyword-based discovery), get_sample_files (retrieve full project files for a sample), get_index (discover valid product/edition/platform combinations).
Resolve a concrete latest-major version number for a Dynamsoft product/edition/platform. WHEN TO USE: - To get the exact current version string (e.g. '10.4.2001') for use in package installation or dependency pinning. - When the user asks 'what is the latest version of DBR?'. - To verify version compatibility before generating project scaffolding. WHEN NOT TO USE: - If you just need sample code, use get_quickstart (it already includes the correct version). - For browsing docs or samples, use search or list_samples (they already scope to latest major). PARAMETERS: - product (required): dbr, dwt, ddv, mrz, or mds. - edition: core, mobile, web, or server. Note: DBR editions are core (C++, Java, etc.), mobile (Android, iOS, etc.), web (JavaScript, TypeScript, etc.), and server/desktop (Python, .NET, C++, etc.). Other products span only one edition in this MCP: DWT/DDV are web-only; MRZ and MDS are web-only in this MCP (mobile and server versions available as reference documentation links). Omit to see all editions for the product. - platform: only DBR spans multiple platforms (android, ios, js, python, cpp, java, dotnet, nodejs, etc.). For other products: DWT/DDV are web/JavaScript-only; omit platform or use 'web' or 'js'. Helps narrow edition when ambiguous. - constraint: Version constraint like 'latest', '11.x', '10'. Only latest major version is served; legacy versions (e.g. DBR v9) return an error with migration guidance. - feature: Optional feature hint for version policy checks. RETURNS: A text block showing the resolved version. For MRZ/MDS without an edition, returns the backed public version matrix. For DBR without an edition, returns all edition versions. For DWT/DDV, returns the single web version. EXAMPLE: resolve_version with product='dbr', edition='web' returns the latest DBR web SDK version string. RELATED TOOLS: get_quickstart (includes version in starter code), get_index (shows version overview).
Search across documentation and samples using semantic (RAG) search with fuzzy fallback. WHEN TO USE: - To find docs or samples by keyword, topic, or exact sample ID. - To look up specific scenarios: MRZ scanning, barcode decoding, document normalization, document scanning, and viewer workflows. - When you have a natural-language question about a Dynamsoft SDK. - For sample lookup by exact ID (e.g. query='hello-world', type='sample'). WHEN NOT TO USE: - To browse all samples in a scope, use list_samples instead. - To get starter code quickly, use get_quickstart instead. - If you do not know valid products/editions, call get_index first. PARAMETERS: - query (required): Keywords or exact sample ID. Examples: 'barcode scanning from camera', 'MRZ passport reader', 'hello-world'. - product: dbr, dwt, ddv, mrz, or mds. Use DBR for barcode-only, MRZ for passport/machine-readable-zone workflows, and MDS for document scan or normalization workflows. - edition: core, mobile, web, or server. Note: DBR editions are core (C++, Java, etc.), mobile (Android, iOS, etc.), web (JavaScript, TypeScript, etc.), and server/desktop (Python, .NET, C++, etc.). Other products span only one edition in this MCP: DWT/DDV are web-only; MRZ and MDS are web-only in this MCP (mobile and server versions available as reference documentation links). - platform: only DBR spans multiple platforms (android, ios, js, python, cpp, java, dotnet, nodejs, react, vue, angular, flutter, react-native, maui, etc.). For other products: DWT/DDV are web/JavaScript-only; omit platform or use 'web' or 'js'. - version: Version constraint (e.g. '10', '11.x'). Only latest major is served by default. - type: 'doc', 'sample', 'index', 'policy', or 'any' (default). Use 'sample' to restrict to sample results. - limit: 1-10 (default 5). Max number of results. RETURNS: An MCP response whose content array includes a leading text summary item followed by zero or more resource_link items with URIs. Use resources/read to fetch full content of doc:// URIs. Use get_sample_files to fetch full project files for sample:// URIs. RELATED TOOLS: get_index (discover products first), list_samples (browse all samples), get_sample_files (retrieve full sample project files), resources/read (read a doc resource).
Some free-form string parameters lack enum constraints. 'scenario' in get_quickstart and 'constraint' in resolve_version accept arbitrary strings with examples ('MRZ', 'document scan', 'latest', '11.x') rather than defined enums. This invites hallucinated values from LLMs.
The 'api_level' parameter appears in get_sample_files and get_quickstart with a note 'API level applies only to DBR mobile'. This conditional constraint is documented in prose but not formalized. If 'product' is not 'dbr' or 'edition' is not 'mobile', the parameter should be ignored or rejected, but the schema does not enforce this.