MCP server that exposes the CEDAR artifact library's builders, readers, and renderers as composable tools. Consumes IRI/acronym/name tuples from upstream terminology MCPs (e.g. bioportal-term-mcp) and assembles CEDAR templates, elements, fields, and instances.
Cedar-artifact-mcp demonstrates solid definition quality with comprehensive parameter schemas and detailed descriptions across all 6 tools. All tools have clear verb-noun naming (add_element, create_field, convert_artifact_file, etc.) and descriptions ranging 150-400 chars. Input schemas are well-structured with type definitions and parameter descriptions. However, output schemas are not explicitly documented in the tool definitions, responses are described narratively ('Returns the artifact as expanded YAML') rather than as formal JSON Schema. Error handling guidance is minimal; tools lack recovery hints for common failure modes. Tool composition is strong: outputs (artifact YAML) chain naturally into subsequent tool inputs. No security issues detected (no credentials in params). Minor gaps prevent A-grade: output schema documentation and error recovery patterns would elevate this to 80+.
Adds an existing CEDAR element (as YAML) as a child of a CEDAR template or element. Parent kind is inferred from the artifact. Returns the updated parent as expanded YAML, re-validated with CedarValidator.
Adds an existing CEDAR field (as YAML) as a child of a CEDAR template or element. Parent kind is inferred from the artifact. isRequired / isHidden optionally set the embedded copy's required-value constraint and hidden flag for this parent. Returns the updated parent as expanded YAML, re-validated with CedarValidator.
Reads a CEDAR artifact from source_path and writes it to dest_path in the requested format — entirely on disk, so the artifact never enters the conversation. This is the way to convert a large JSON artifact to YAML (about a tenth the size) or vice versa without spending any tokens on the content. The output format is inferred from dest_path's extension (.json → JSON, otherwise YAML) unless 'format' overrides it. Both paths must be absolute. Returns only a summary. Overwrites dest_path and creates parent directories. Does not validate.
Builds an empty CEDAR element schema artifact with the supplied name, description, version, and status. Returns the artifact as expanded YAML — the exchange form. Reusable elements are first-class CEDAR artifacts; the returned YAML can be added to templates (add_element) or composed via other tools.
Output schemas not formally documented. Tool descriptions state 'Returns the artifact as expanded YAML' but do not specify the structure (fields, types, required properties) of returned objects. LLMs cannot plan downstream tool calls without knowing what fields to extract.
Error handling lacks recovery guidance. Tools do not document what errors are retryable, what user actions are needed, or what alternative tools to call on failure. E.g., 'CedarValidator rejects the artifact' gives no hint on how to fix it.
convert_artifact_file accepts 'source_path' and 'dest_path' as absolute file paths. No validation guidance documented for path traversal or symlink attacks. Tool description should warn: 'Paths must be absolute and within allowed directories; relative paths and symlinks are rejected.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Walks a CEDAR element and produces an empty element instance — the element counterpart of create_template_instance. Graft it into a template instance with set_element_instance (e.g. to append an entry to a multi-instance element list), then fill its fields with the set_*_field_value tools. Returns the standalone element instance as expanded YAML; validate it against its element with validate_instance_artifact, or in context once attached to a parent instance.
Builds a CEDAR field schema artifact of the supplied kebab-case type (e.g. text-field, controlled-term-field, numeric-field). Returns the artifact as expanded YAML (the exchange form), validated by CedarValidator. A field is a first-class, reusable CEDAR artifact.
create_field 'type' enum is comprehensive (23 values) but lacks grouping or discovery. LLMs may struggle to pick the right field type without a discovery tool (e.g., list_field_types with descriptions). Consider adding a separate tool or resource to guide field type selection.
Parameters like 'status' in create_element and create_field lack enum constraints. Description says 'Status of the element artifact' but does not enumerate valid values (e.g., draft, published, deprecated). Free-form strings invite hallucinated values.