RibbonSmith
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RIBBON_MCP_AUTH | No | Override authentication strategy: 'clientsecret', 'azcli', 'interactive', or 'auto' (default) | |
| RIBBON_MCP_ENV_URL | Yes | The Dataverse environment URL (e.g., https://yourorg.crm4.dynamics.com) | |
| RIBBON_MCP_CLIENT_ID | No | Client ID for service principal or interactive authentication | |
| RIBBON_MCP_TENANT_ID | No | Tenant ID for service principal authentication | |
| RIBBON_MCP_WORKSPACE | No | Path to workspace directory for backups and working files (default ~/.dataverse-ribbon-mcp/) | |
| RIBBON_MCP_CLIENT_SECRET | No | Client secret for service principal authentication |
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 |
|---|---|
| ribbon_statusA | Show the connection (WhoAmI), current checkouts with dirty state, and recent backups for a Dataverse environment. Start here to orient yourself. |
| ribbon_checkoutA | Begin editing the ribbon of an entity (or the application ribbon). Creates/reuses a temporary unmanaged solution containing only the entity shell, exports it, stores the export as a restorable backup, and initializes a local working copy of the entity's RibbonDiffXml. All edit tools operate on this local copy; nothing changes in the environment until ribbon_publish. |
| ribbon_get_structureA | Return the entity's fully composed ribbon (base + all customizations) as a compact JSON tree of tabs, groups and controls with ids, commands, labels, sequences and template aliases. This is the ground truth for valid Location values ('.Controls._children'), ids to hide, commands to reuse, and sequence placement. Filter by location and optionally by tab/group id to keep output small. |
| ribbon_get_commandA | Return the full definition of a command from the composed ribbon: its actions, enable rules and display rules (with rule bodies where they are defined). Use this before customizing or reusing an out-of-the-box command. |
| ribbon_get_diffA | Return the current working copy of the entity's RibbonDiffXml (requires checkout) — the complete declarative customization state that will be published. |
| ribbon_add_buttonA | Add a button with its command, rules and labels to the local working copy in one declarative call. The server generates schema-correct XML with proper id conventions, $LocLabels:/$webresource: prefixes and element order. Requires ribbon_checkout first. Get the location from ribbon_get_structure (a group id + '.Controls._children'). |
| ribbon_hide_controlA | Remove an existing (usually out-of-the-box) control from the ribbon via HideCustomAction in the local working copy. The control id comes from ribbon_get_structure. Note: per Microsoft docs, for commands you own, an always-false display rule is often preferable; HideCustomAction removes the node others may target. |
| ribbon_customize_commandA | Copy an out-of-the-box command definition from the composed ribbon into the working diff so it can be modified (the Ribbon Workbench 'Customise Command' operation). Rule definitions that are core (Mscrm.*) stay as id references; non-core rule bodies are copied too. After copying, edit the returned XML with ribbon_edit_diff, or publish as-is to pin the current behavior. |
| ribbon_edit_diffA | Escape hatch for anything the declarative tools don't cover (flyouts, menus, groups, tabs, command edits): replace the entire working RibbonDiffXml with the supplied XML. The XML is parsed, normalized to schema element order and validated; errors are returned without saving unless 'force' is set. Read the current state first with ribbon_get_diff. |
| ribbon_remove_customizationA | Remove a CustomAction, HideCustomAction, CommandDefinition, rule or LocLabel from the local working copy by its Id. Un-hides / un-customizes after the next publish. Use ribbon_get_diff to list current ids. |
| ribbon_preview_diffA | Show the working RibbonDiffXml alongside the full validation report (schema order, id uniqueness, command/rule/label references, location existence against the real ribbon, web resource existence) without touching the environment. Always call before ribbon_publish. |
| ribbon_publishA | Validate, back up the current server state, then write the working RibbonDiffXml to the environment: splice into a fresh solution export, submit an async solution import, wait up to waitSeconds, then PublishXml and verify the changes are live by re-reading the composed ribbon. If the import outlasts the wait, returns status 'importing' — finish with ribbon_publish_status. Returns the backup id for ribbon_restore_backup. |
| ribbon_publish_statusA | Poll the async solution import started by ribbon_publish or ribbon_restore_backup. When the import has finished, this completes the operation: publishes the ribbon, verifies it live, and syncs local state. Call repeatedly (imports typically take 1-3 minutes) until status is 'published'/'restored'. |
| ribbon_discardA | Reset the working copy to the last exported/published state. Does not touch the environment. |
| ribbon_list_backupsA | List backup zips (taken at checkout and before every publish) that ribbon_restore_backup can re-import. |
| ribbon_restore_backupA | Re-import a backup solution zip (restoring the entity's RibbonDiffXml to that point in time), publish, and reset the local working copy to match. This is the revert mechanism. Like ribbon_publish, the import runs async — if it outlasts waitSeconds, finish with ribbon_publish_status. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Longman006/ribbonsmith'
If you have feedback or need assistance with the MCP directory API, please join our Discord server