MCP ExplorerExplorer

DevHub CMS MCP

@devhubon 11 days ago
3 MIT
FreeOfficial
Productivity
#cms#content management#devhub
Manage and utilize website content within the DevHub CMS platform

Overview

What is DevHub CMS MCP

DevHub CMS MCP is a Model Context Protocol integration designed to facilitate content management within the DevHub CMS system. It allows users to efficiently interact with various API services related to business, location, content, and media management through a standardized protocol.

Use cases

This MCP can be utilized for various tasks including retrieving and updating business locations, managing blog posts, and uploading images to the media gallery. It provides a structured way to interact with the DevHub CMS, making it ideal for managing online content without directly accessing the API.

How to use

Users can configure the MCP by adding settings to their application (e.g., Claude Desktop or Cursor) environment, specifying commands and necessary environment variables like API keys and base URL. Once configured, users can leverage the provided tools for performing tasks such as creating and updating content, managing business information, and handling media assets.

Key features

Key features of the DevHub CMS MCP include tools for business and location management (like retrieving and updating hours of operation), content management (like creating and editing blog posts), and media management (like uploading images). It also supports testing with mocked requests to ensure functionality without making actual API calls.

Where to use

The DevHub CMS MCP can be used with platforms that support the Model Context Protocol, particularly with large language models (LLMs) such as Claude. It streamlines content and media management processes within the DevHub ecosystem, making it suitable for businesses that use DevHub for their content management needs.

Content

DevHub CMS MCP

smithery badge

A Model Context Protocol (MCP) integration for managing content in the DevHub CMS system.

Installation

You will need the uv package manager installed on your local system.

Manual configuration of Claude Desktop

To use this server with the Claude Desktop app, add the following configuration to the “mcpServers” section of your claude_desktop_config.json:

{
    "mcpServers": {
        "devhub_cms_mcp": {
            "command": "uvx",
            "args": [
                "devhub-cms-mcp"
            ],
            "env": {
                "DEVHUB_API_KEY": "YOUR_KEY_HERE",
                "DEVHUB_API_SECRET": "YOUR_SECRET_HERE",
                "DEVHUB_BASE_URL": "https://yourbrand.cloudfrontend.net"
            }
        }
    }
}

After updating the config, restart Claude Desktop.

Manual configuration for Cursor

This MCP can also be used in cursor with a similar configuration from above added to your Cursor global environment or to individual projects.

Examples here

Installing via Claude Code

Claude Code’s command line supports MCP installs.

You can add the devhub-cms-mcp by updating the environment variables below

claude mcp add devhub-cms-mcp \
    -e DEVHUB_API_KEY=YOUR_KEY_HERE \
    -e DEVHUB_API_SECRET=YOUR_SECRET_HERE \
    -e DEVHUB_BASE_URL=https://yourbrand.cloudfrontend.net \
    -- uvx devhub-cms-mcp

Installing via Smithery

To install DevHub CMS MCP for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @devhub/devhub-cms-mcp --client claude

Local development

Clone the repo (or your fork)

git clone [email protected]:devhub/devhub-cms-mcp.git

Manual configuration of Claude Desktop

To use this server with the Claude Desktop app for local development, add the following configuration to the “mcpServers” section of your claude_desktop_config.json:

{
    "mcpServers": {
        "devhub_cms_mcp": {
            "command": "uv",
            "args": [
                "--directory",
                "/YOUR/LOCAL/PATH/devhub-cms-mcp/",
                "run",
                "main.py"
            ],
            "env": {
                "DEVHUB_API_KEY": "YOUR_KEY_HERE",
                "DEVHUB_API_SECRET": "YOUR_SECRET_HERE",
                "DEVHUB_BASE_URL": "https://yourbrand.cloudfrontend.net"
            }
        }
    }
}

After updating the config, restart Claude Desktop.

Configuration for running with uv directly

This MCP requires the following environment variables to be set:

export DEVHUB_API_KEY="your_api_key"
export DEVHUB_API_SECRET="your_api_secret"
export DEVHUB_BASE_URL="https://yourbrand.cloudfrontend.net"

Then run the MCP

uv run main.py

Available Tools

This MCP provides the following tools for interacting with DevHub CMS:

Business and Location Management

  • get_businesses(): Gets all businesses within the DevHub account. Returns a list of businesses with their IDs and names.
  • get_locations(business_id): Gets all locations for a specific business. Returns detailed location information including address, coordinates, and URLs.
  • get_hours_of_operation(location_id, hours_type=‘primary’): Gets the hours of operation for a specific DevHub location. Returns a structured list of time ranges for each day of the week.
  • update_hours(location_id, new_hours, hours_type=‘primary’): Updates the hours of operation for a DevHub location.
  • get_nearest_location(business_id, latitude, longitude): Finds the nearest DevHub location based on geographic coordinates.
  • site_from_url(url): Gets the DevHub site ID and details from a URL. Returns site ID, URL, and associated location IDs.

Content Management

  • get_blog_post(post_id): Retrieves a single blog post by ID, including its title, date, and HTML content.
  • create_blog_post(site_id, title, content): Creates a new blog post. The content should be in HTML format and should not include an H1 tag.
  • update_blog_post(post_id, title=None, content=None): Updates an existing blog post’s title and/or content.

Media Management

  • upload_image(base64_image_content, filename): Uploads an image to the DevHub media gallery. Supports webp, jpeg, and png formats. The image must be provided as a base64-encoded string.

Usage with LLMs

This MCP is designed to be used with Large Language Models that support the Model Context Protocol. It allows LLMs to manage content in DevHub CMS without needing direct API access integrated into the LLM natively.

Testing

This package includes a test suite with mocked requests to the DevHub API, allowing you to test the functionality without making actual API calls.

Running Tests

To run the tests, first install the package with test dependencies:

uv pip install -e ".[test]"

Run the tests with pytest:

uv run pytest

For more detailed output and test coverage information:

uv run pytest -v --cov=devhub_cms_mcp

Test Structure

  • tests/devhub_cms_mcp/test_mcp_integration.py: Tests for MCP integration endpoints

Tools

get_hours_of_operation
Get the hours of operation for a DevHub location Returns a list of items representing days of the week Except for the special case formatting, this object is a list of 7 items which represent each day. Each day can can have one-four time ranges. For example, two time ranges denotes a "lunch-break". No time ranges denotes closed. Examples: 9am-5pm [["09:00:00", "17:00:00"]] 9am-12pm and 1pm-5pm [["09:00:00", "12:00:00"], ["13:00:00", "17:00:00"]] Closed - an empty list [] Args: location_id: DevHub Location ID hours_type: Defaults to 'primary' unless the user specifies a different type
get_businesses
Get all businesses within the DevHub account Returns a list of businesses with the following fields: - id: Business ID that can be used in the other tools - business_name: Business name If only one business exists in the account, you can assume that the user wants to use that business for any business_id related tools.
get_locations
Get all locations for a business Returns a list of locations with the following fields: - id: Location ID that can be used in the other tools - location_name: Location name - location_url: Location URL in DevHub - street: Street address - city: City - state: State - country: Country - postal_code: Postal code - lat: Latitude - lon: Longitude
update_hours
Update the hours of operation for a DevHub location Send a list of items representing days of the week Except for the special case formatting, this object is a list of 7 items which represent each day. Each day can can have one-four time ranges. For example, two time ranges denotes a "lunch-break". No time ranges denotes closed. Examples: 9am-5pm [["09:00:00", "17:00:00"]] 9am-12pm and 1pm-5pm [["09:00:00", "12:00:00"], ["13:00:00", "17:00:00"]] Closed - an empty list [] Args: location_id: DevHub Location ID new_hours: Structured format of the new hours hours_type: Defaults to 'primary' unless the user specifies a different type
site_from_url
Get the DevHub site ID from a URL. Can prompt the user for the URL instead of passing a site_id. Returns details about the Site matches the URL that can be used in the other tools. - Site ID: ID of the DevHub site - Site URL: URL of the DevHub site - Site Location IDs: List of location IDs associated with the site Args: url: URL of the DevHub site, all lowercase and ends with a slash
upload_image
Upload an image to the DevHub media gallery Supports webp, jpeg and png images Args: base64_image_content: Base 64 encoded content of the image file filename: Filename including the extension
get_blog_post
Get a single blog post Args: post_id: Blog post id
create_blog_post
Create a new blog post Args: site_id: Website ID where the post will be published. Prompt the user for this ID. title: Blog post title content: HTML content of blog post. Should not include a <h1> tag, only h2+
update_blog_post
Update a single blog post Args: post_id: Blog post ID title: Blog post title content: HTML content of blog post. Should not include a <h1> tag, only h2+
get_nearest_location
Get the nearest DevHub location Args: business_id: DevHub Business ID associated with the location. Prompt the user for this ID latitude: Latitude of the location longitude: Longitude of the location

Comments