{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"awesome-devhub","slug":"devhub","name":"DevHub","type":"mcp","url":"https://github.com/devhub/devhub-cms-mcp","page_url":"https://unfragile.ai/devhub","categories":["mcp-servers"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"awesome-devhub__cap_0","uri":"capability://tool.use.integration.oauth1.authenticated.api.bridging.for.devhub.cms.operations","name":"oauth1-authenticated api bridging for devhub cms operations","description":"Implements a FastMCP server that translates natural language requests from LLM clients into authenticated OAuth1 API calls to the DevHub CMS backend, using requests-oauthlib for credential injection and structured response formatting. The server acts as a translation layer that handles authentication state management, request serialization, and response deserialization without requiring LLMs to implement native DevHub API integration.","intents":["Enable Claude Desktop, Cursor, and other MCP-compatible LLM clients to authenticate with DevHub CMS without hardcoding credentials in prompts","Centralize OAuth1 credential management so multiple LLM clients can share a single authenticated session","Abstract DevHub API complexity so LLMs can invoke CMS operations through simple tool calls"],"best_for":["Teams running Claude Desktop, Cursor IDE, or Claude Code who need LLM-driven content management","DevHub CMS users integrating with AI-powered workflows","Developers building multi-client LLM applications requiring centralized API authentication"],"limitations":["OAuth1 authentication requires environment variables (DEVHUB_API_KEY, DEVHUB_API_SECRET, DEVHUB_BASE_URL) to be set before server startup — no runtime credential rotation","Single credential set per server instance — cannot support multi-tenant scenarios with different API keys","Response formatting is DevHub-specific — requires custom adaptation for other CMS platforms"],"requires":["Python 3.9+","DEVHUB_API_KEY environment variable","DEVHUB_API_SECRET environment variable","DEVHUB_BASE_URL environment variable pointing to DevHub CMS instance","requests-oauthlib library"],"input_types":["natural language tool invocation from LLM","structured tool parameters (business IDs, location IDs, content slugs)"],"output_types":["JSON-structured API responses","error messages with HTTP status codes","formatted business/location/content data"],"categories":["tool-use-integration","authentication"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_1","uri":"capability://tool.use.integration.multi.client.mcp.tool.exposure.with.fastmcp.framework","name":"multi-client mcp tool exposure with fastmcp framework","description":"Exposes DevHub CMS operations as standardized MCP tools that work across Claude Desktop, Cursor IDE, Claude Code CLI, and Smithery package manager through a single FastMCP server implementation. Tools are declaratively defined with schema validation, parameter documentation, and structured output formatting, enabling LLM clients to discover and invoke capabilities without custom integration code.","intents":["Deploy a single MCP server that works with multiple LLM clients (Claude Desktop, Cursor, Claude Code) without reimplementation","Enable LLM clients to discover available DevHub CMS operations through MCP tool introspection","Provide consistent tool behavior and error handling across different client applications"],"best_for":["Teams using multiple Claude-based IDEs and applications (Claude Desktop + Cursor + Claude Code)","Organizations standardizing on MCP for LLM integrations","DevHub CMS users who want LLM access across desktop, IDE, and CLI environments"],"limitations":["Tool definitions are static at server startup — cannot dynamically add/remove tools based on runtime conditions","MCP protocol overhead adds ~50-100ms per tool invocation compared to direct API calls","Client support limited to MCP-compatible applications — no REST API fallback for non-MCP clients"],"requires":["FastMCP framework","MCP-compatible LLM client (Claude Desktop, Cursor, Claude Code, or Smithery)","Python 3.9+ for server runtime","uvx, npm, or Python package manager for installation"],"input_types":["MCP tool call with typed parameters","natural language from LLM client"],"output_types":["MCP tool result with structured JSON","error responses with diagnostic messages"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_2","uri":"capability://tool.use.integration.business.and.location.hierarchical.querying.with.geolocation.support","name":"business and location hierarchical querying with geolocation support","description":"Provides tools to query DevHub CMS business and location data with hierarchical relationships, including get_businesses (retrieve all businesses), get_locations (retrieve locations for a specific business), get_nearest_location (find closest location by coordinates), and site_from_url (resolve business from website URL). Implements geospatial distance calculation and URL-to-business reverse lookup, enabling LLMs to navigate multi-location business structures.","intents":["Query all businesses managed in DevHub CMS and their associated locations","Find the nearest business location to a user's coordinates for location-aware content management","Resolve a business identity from its website URL to enable context-aware operations","Navigate business-location hierarchies to target content updates to specific locations"],"best_for":["Multi-location businesses using DevHub CMS for location-specific content","LLM agents that need to resolve location context from user input (addresses, coordinates, URLs)","Content management workflows that target specific business locations"],"limitations":["get_nearest_location requires valid latitude/longitude coordinates — no address-to-coordinates geocoding built-in","site_from_url performs reverse lookup only — cannot generate URLs from business IDs","Hierarchical queries return all locations for a business — no filtering by region, state, or custom attributes","No pagination support — large location lists may exceed response size limits"],"requires":["Valid business IDs from DevHub CMS","DEVHUB_API_KEY and DEVHUB_API_SECRET for authentication","For get_nearest_location: latitude and longitude as decimal coordinates"],"input_types":["business_id (string or integer)","latitude/longitude (float coordinates)","website_url (full URL string)"],"output_types":["JSON array of business objects with ID, name, metadata","JSON array of location objects with address, coordinates, hours","single location object (nearest match)","business object resolved from URL"],"categories":["tool-use-integration","data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_3","uri":"capability://tool.use.integration.hours.of.operation.management.with.update.persistence","name":"hours of operation management with update persistence","description":"Exposes get_hours_of_operation (retrieve current hours for a business/location) and update_hours (modify hours with validation and persistence to DevHub CMS). Updates are immediately persisted to the DevHub backend via authenticated API calls, enabling LLMs to manage business hours directly without manual CMS access. Supports structured hours data with day-of-week granularity.","intents":["Retrieve current business hours for a location to display in content or verify before updates","Update business hours (opening/closing times, holidays, special hours) through LLM-driven workflows","Synchronize hours across multiple locations by automating bulk updates via LLM agents","Enable non-technical staff to modify hours through natural language requests to Claude"],"best_for":["Multi-location businesses that frequently update hours (seasonal, holiday, special events)","DevHub CMS users who want to automate hours management through LLM agents","Teams managing hours across many locations and seeking to reduce manual CMS access"],"limitations":["update_hours requires full hours object structure — no partial updates (must provide complete day/time data)","No validation of hours logic (e.g., closing time before opening time) — relies on DevHub API validation","No timezone support — assumes all times are in location's local timezone without explicit specification","No audit trail of who/when hours were changed — changes are attributed to API credentials only"],"requires":["Valid business_id and location_id","DEVHUB_API_KEY and DEVHUB_API_SECRET","Hours data in DevHub CMS format (day-of-week structure with opening/closing times)"],"input_types":["business_id (string/integer)","location_id (string/integer)","hours object with day-of-week keys and time values"],"output_types":["JSON hours object with current operating times","confirmation response with updated hours"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_4","uri":"capability://tool.use.integration.blog.post.crud.operations.with.content.versioning","name":"blog post crud operations with content versioning","description":"Implements get_blog_post (retrieve published blog content by slug), create_blog_post (publish new blog posts with title, body, metadata), and update_blog_post (modify existing posts) with full persistence to DevHub CMS. Each operation maps to authenticated DevHub API endpoints, enabling LLMs to manage blog content lifecycle without CMS UI access. Supports structured metadata (tags, categories, publish status).","intents":["Retrieve published blog posts to reference existing content or check publication status","Create new blog posts with title, body, and metadata through LLM-driven content generation","Update existing blog posts (title, body, tags, publish status) to keep content current","Automate blog content workflows (draft → publish → archive) through LLM agents"],"best_for":["Content teams using DevHub CMS for blog management who want LLM-assisted writing/editing","Developers building AI-powered content generation workflows","Organizations automating blog updates (product announcements, status updates, news)"],"limitations":["create_blog_post and update_blog_post require full content objects — no partial field updates","No draft/publish workflow enforcement — LLM must manage state transitions manually","No content versioning or rollback — updates overwrite previous versions","No scheduled publishing — posts are immediately published/updated upon API call","No rich text editor integration — body content is plain text or HTML, no WYSIWYG validation"],"requires":["Valid business_id (blog posts are scoped to a business)","DEVHUB_API_KEY and DEVHUB_API_SECRET","For get_blog_post: post slug (URL-friendly identifier)","For create/update: title, body, and optional metadata fields"],"input_types":["business_id (string/integer)","post_slug (URL-friendly string)","title (string)","body (text/HTML)","metadata (tags, categories, publish_status)"],"output_types":["JSON blog post object with content, metadata, timestamps","confirmation response with post ID and publication status"],"categories":["tool-use-integration","text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_5","uri":"capability://tool.use.integration.image.upload.and.media.asset.management","name":"image upload and media asset management","description":"Exposes upload_image tool that accepts image files (binary or base64-encoded) and persists them to DevHub CMS media storage with metadata (alt text, title, description). Handles multipart form encoding for file transmission and returns media asset URLs/IDs for reference in blog posts and other content. Integrates with DevHub's asset management backend.","intents":["Upload images generated by AI image tools or provided by users to DevHub CMS media library","Associate images with blog posts and other content through returned asset URLs","Manage image metadata (alt text, titles) for accessibility and SEO","Build end-to-end content workflows that combine text generation + image upload"],"best_for":["Content teams creating blog posts with AI-generated or user-provided images","LLM agents that generate images (via DALL-E, Midjourney, etc.) and need to persist them","Developers building multi-modal content workflows (text + images)"],"limitations":["No image validation or format enforcement — relies on DevHub backend to reject invalid formats","No image optimization or resizing — uploaded images are stored as-is","No batch upload support — must upload images one at a time","No image deletion capability — uploaded assets cannot be removed through MCP","File size limits not documented — may fail silently on large uploads"],"requires":["Valid business_id","DEVHUB_API_KEY and DEVHUB_API_SECRET","Image file in supported format (JPEG, PNG, GIF, WebP — exact formats not documented)","Optional: alt_text, title, description metadata"],"input_types":["business_id (string/integer)","image_file (binary or base64-encoded)","alt_text (string, optional)","title (string, optional)","description (string, optional)"],"output_types":["JSON response with media asset URL, asset ID, and metadata"],"categories":["tool-use-integration","image-visual","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_6","uri":"capability://automation.workflow.installation.and.deployment.across.multiple.llm.client.platforms","name":"installation and deployment across multiple llm client platforms","description":"Supports four distinct installation methods (Claude Desktop via uvx, Cursor IDE via MCP config, Claude Code CLI via claude mcp add, Smithery via npx) that deploy the same FastMCP server code to different environments. Each method handles platform-specific configuration (config file paths, environment variable injection, package registry integration) while maintaining identical server behavior. Enables developers to choose deployment method based on their LLM client preference.","intents":["Deploy DevHub CMS MCP to Claude Desktop for desktop-based content management workflows","Integrate DevHub CMS MCP into Cursor IDE for in-editor content operations","Install DevHub CMS MCP via Claude Code CLI for command-line LLM workflows","Distribute DevHub CMS MCP through Smithery package registry for automated discovery"],"best_for":["Teams using Claude Desktop who want one-click MCP installation","Developers using Cursor IDE who need DevHub CMS integration","CLI-first workflows using Claude Code","Organizations distributing MCP tools through package registries"],"limitations":["Each installation method requires different configuration — no unified installer","Environment variables (DEVHUB_API_KEY, DEVHUB_API_SECRET, DEVHUB_BASE_URL) must be set separately for each deployment","No automatic updates — each client must manually reinstall to get new versions","Installation methods are client-specific — cannot use same config across different clients","Smithery installation requires npm/Node.js — not available for Python-only environments"],"requires":["For Claude Desktop: Claude Desktop app + uvx + claude_desktop_config.json","For Cursor: Cursor IDE + MCP configuration file","For Claude Code: Claude Code CLI + npm or Python package manager","For Smithery: npm + @smithery/cli","All methods: DEVHUB_API_KEY, DEVHUB_API_SECRET, DEVHUB_BASE_URL environment variables"],"input_types":["installation command (uvx, npm, claude mcp add, etc.)","configuration file (claude_desktop_config.json or equivalent)","environment variables"],"output_types":["installed MCP server in client-specific location","confirmation of successful installation"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_7","uri":"capability://safety.moderation.environment.based.credential.management.with.oauth1.injection","name":"environment-based credential management with oauth1 injection","description":"Manages DevHub CMS OAuth1 credentials (API key, API secret, base URL) through environment variables (DEVHUB_API_KEY, DEVHUB_API_SECRET, DEVHUB_BASE_URL) that are read at server startup and injected into all API requests via requests-oauthlib. Credentials are never exposed to LLM clients or stored in configuration files, enabling secure multi-client access without credential sharing. Supports both local development and containerized deployment.","intents":["Securely manage DevHub CMS credentials without exposing them to LLM clients","Enable multiple LLM clients (Claude Desktop, Cursor, Claude Code) to share a single authenticated session","Deploy MCP server to different environments (local, Docker, cloud) with environment-specific credentials","Prevent accidental credential exposure in configuration files or logs"],"best_for":["Teams requiring secure credential management for LLM-driven CMS access","Organizations deploying MCP servers to shared environments (Docker, Kubernetes, cloud)","Development teams that need to rotate credentials without redeploying code"],"limitations":["Credentials must be set before server startup — no runtime credential updates","No credential rotation mechanism — requires server restart to change credentials","Single credential set per server instance — cannot support multi-tenant scenarios","Environment variables are read at startup and cached in memory — no live refresh","No audit logging of credential usage — cannot track which operations used which credentials"],"requires":["DEVHUB_API_KEY environment variable (OAuth1 consumer key)","DEVHUB_API_SECRET environment variable (OAuth1 consumer secret)","DEVHUB_BASE_URL environment variable (DevHub CMS API endpoint)","requests-oauthlib library for OAuth1 request signing"],"input_types":["environment variables (set before server startup)"],"output_types":["authenticated API requests with OAuth1 signatures","error responses if credentials are missing or invalid"],"categories":["safety-moderation","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_8","uri":"capability://tool.use.integration.structured.tool.schema.definition.with.parameter.validation","name":"structured tool schema definition with parameter validation","description":"Defines MCP tools with explicit JSON schemas that specify parameter types, required fields, descriptions, and constraints. FastMCP framework validates incoming tool calls against these schemas before execution, rejecting malformed requests with validation errors. Enables LLM clients to discover tool capabilities through schema introspection and provides type safety for API calls.","intents":["Enable LLM clients to discover available DevHub CMS operations and their parameters through schema introspection","Validate tool parameters before sending to DevHub API to catch errors early","Provide clear documentation of tool capabilities and parameter requirements to LLM clients","Enforce type safety for API calls (e.g., business_id must be string/integer, not arbitrary text)"],"best_for":["LLM clients that support schema-based tool discovery (Claude, Cursor, etc.)","Development teams building LLM agents that need parameter validation","Organizations standardizing on MCP for consistent tool interface across applications"],"limitations":["Schema validation is basic — no custom validation logic (e.g., business_id must exist in DevHub)","Schemas are static at server startup — cannot dynamically adjust based on runtime state","Schema documentation is limited to parameter descriptions — no examples or usage patterns","No schema versioning — breaking changes to tool parameters require server restart"],"requires":["FastMCP framework with schema definition support","JSON schema knowledge for defining tool parameters"],"input_types":["tool call with parameters matching schema"],"output_types":["validation error if parameters don't match schema","tool result if validation passes"],"categories":["tool-use-integration","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-devhub__cap_9","uri":"capability://tool.use.integration.error.handling.and.structured.response.formatting","name":"error handling and structured response formatting","description":"Implements consistent error handling across all MCP tools with structured error responses that include HTTP status codes, error messages, and diagnostic information. All successful tool calls return JSON-formatted responses that LLM clients can easily parse and present to users. Errors from DevHub API are caught, formatted, and returned to LLM clients without exposing raw API responses.","intents":["Provide clear error messages when DevHub API calls fail (authentication errors, validation errors, server errors)","Format successful API responses in consistent JSON structure for easy LLM parsing","Enable LLM clients to distinguish between different error types (auth, validation, server) and respond appropriately","Prevent raw API errors from confusing LLM clients or exposing internal DevHub details"],"best_for":["LLM agents that need to handle errors gracefully and retry operations","Development teams building robust LLM workflows with error recovery","Organizations requiring consistent error handling across multiple MCP tools"],"limitations":["Error messages are DevHub-specific — may not translate well to other CMS platforms","No automatic retry logic — LLM clients must implement their own retry strategies","Error details are limited to HTTP status and message — no detailed diagnostic information","No error categorization — LLM clients cannot easily distinguish between recoverable and non-recoverable errors"],"requires":["FastMCP framework with error handling support","DevHub API error responses in expected format"],"input_types":["tool call that may fail"],"output_types":["JSON error response with status code and message","JSON success response with formatted data"],"categories":["tool-use-integration","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":27,"verified":false,"data_access_risk":"high","permissions":["Python 3.9+","DEVHUB_API_KEY environment variable","DEVHUB_API_SECRET environment variable","DEVHUB_BASE_URL environment variable pointing to DevHub CMS instance","requests-oauthlib library","FastMCP framework","MCP-compatible LLM client (Claude Desktop, Cursor, Claude Code, or Smithery)","Python 3.9+ for server runtime","uvx, npm, or Python package manager for installation","Valid business IDs from DevHub CMS"],"failure_modes":["OAuth1 authentication requires environment variables (DEVHUB_API_KEY, DEVHUB_API_SECRET, DEVHUB_BASE_URL) to be set before server startup — no runtime credential rotation","Single credential set per server instance — cannot support multi-tenant scenarios with different API keys","Response formatting is DevHub-specific — requires custom adaptation for other CMS platforms","Tool definitions are static at server startup — cannot dynamically add/remove tools based on runtime conditions","MCP protocol overhead adds ~50-100ms per tool invocation compared to direct API calls","Client support limited to MCP-compatible applications — no REST API fallback for non-MCP clients","get_nearest_location requires valid latitude/longitude coordinates — no address-to-coordinates geocoding built-in","site_from_url performs reverse lookup only — cannot generate URLs from business IDs","Hierarchical queries return all locations for a business — no filtering by region, state, or custom attributes","No pagination support — large location lists may exceed response size limits","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.3,"ecosystem":0.39999999999999997,"match_graph":0.25,"freshness":0.52,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-06-17T09:51:03.038Z","last_scraped_at":"2026-05-03T14:00:15.503Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=devhub","compare_url":"https://unfragile.ai/compare?artifact=devhub"}},"signature":"COOUiWOfMi5X6B76VvktAc25FItLbFrucE+y72sDQ7gZ8yRoQ4P2LXeDa/xSJNy6FXvsv2IbJUJvHWrWMelQAA==","signedAt":"2026-06-20T15:42:20.922Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/devhub","artifact":"https://unfragile.ai/devhub","verify":"https://unfragile.ai/api/v1/verify?slug=devhub","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}