Skip to main content
Glama
devhub

DevHub CMS MCP

Official
by devhub

DevHub CMS MCP

대장간 배지

DevHub CMS 시스템 에서 콘텐츠를 관리하기 위한 MCP(모델 컨텍스트 프로토콜) 통합.

설치

로컬 시스템에 uv 패키지 관리자가 설치되어 있어야 합니다.

Claude Desktop 수동 구성

Claude Desktop 앱 과 함께 이 서버를 사용하려면 claude_desktop_config.json 의 "mcpServers" 섹션에 다음 구성을 추가하세요.

지엑스피1

구성을 업데이트한 후 Claude Desktop을 다시 시작하세요.

커서에 대한 수동 구성

이 MCP는 위와 비슷한 구성을 커서 글로벌 환경이나 개별 프로젝트에 추가하여 커서에서도 사용할 수 있습니다.

여기 의 예

Claude Code를 통해 설치

Claude Code의 명령줄은 MCP 설치를 지원합니다 .

아래 환경 변수를 업데이트하여 devhub-cms-mcp 를 추가할 수 있습니다.

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

Smithery를 통해 설치

Smithery를 통해 Claude Desktop에 DevHub CMS MCP를 자동으로 설치하는 방법:

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

Related MCP server: MCP Adapter Implementation Example

지역 개발

저장소(또는 포크)를 복제합니다.

git clone git@github.com:devhub/devhub-cms-mcp.git

Claude Desktop 수동 구성

로컬 개발을 위해 Claude Desktop 앱과 함께 이 서버를 사용하려면 claude_desktop_config.json 의 "mcpServers" 섹션에 다음 구성을 추가하세요.

{
    "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"
            }
        }
    }
}

구성을 업데이트한 후 Claude Desktop을 다시 시작하세요.

uv 로 직접 실행하기 위한 구성

이 MCP를 사용하려면 다음 환경 변수를 설정해야 합니다.

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

그런 다음 MCP를 실행하세요

uv run main.py

사용 가능한 도구

이 MCP는 DevHub CMS와 상호 작용하기 위한 다음과 같은 도구를 제공합니다.

위치 관리

  • get_hours_of_operation(location_id) : 특정 DevHub 위치의 운영 시간을 가져옵니다. 요일별 시간 범위의 구조화된 목록을 반환합니다.

  • update_hours(location_id, new_hours, hours_type='primary') : DevHub 위치의 운영 시간을 업데이트합니다.

  • get_nearest_location(business_id, latitude, longitude) : 지리적 좌표를 기반으로 가장 가까운 DevHub 위치를 찾습니다.

콘텐츠 관리

  • get_blog_post(post_id) : 제목, 날짜, HTML 콘텐츠를 포함하여 ID로 단일 블로그 게시물을 검색합니다.

  • create_blog_post(site_id, title, content) : 새 블로그 게시물을 생성합니다. 콘텐츠는 HTML 형식이어야 하며 H1 태그를 포함해서는 안 됩니다.

  • update_blog_post(post_id, title=None, content=None) : 기존 블로그 게시물의 제목 및/또는 내용을 업데이트합니다.

미디어 관리

  • upload_image(base64_image_content, filename) : DevHub 미디어 갤러리에 이미지를 업로드합니다. WebP, JPEG, PNG 형식을 지원합니다. 이미지는 base64로 인코딩된 문자열로 제공해야 합니다.

LLM과 함께 사용

이 MCP는 모델 컨텍스트 프로토콜(MCP)을 지원하는 대규모 언어 모델(LLM)과 함께 사용하도록 설계되었습니다. LLM은 LLM에 기본적으로 통합된 직접적인 API 액세스 없이도 DevHub CMS에서 콘텐츠를 관리할 수 있습니다.

테스트

이 패키지에는 DevHub API에 대한 모의 요청이 포함된 테스트 모음이 포함되어 있어 실제 API 호출을 하지 않고도 기능을 테스트할 수 있습니다.

테스트 실행

테스트를 실행하려면 먼저 테스트 종속성이 있는 패키지를 설치하세요.

uv pip install -e ".[test]"

pytest로 테스트를 실행합니다.

pytest

더 자세한 출력 및 테스트 범위 정보는 다음을 참조하세요.

pytest -v --cov=devhub_cms_mcp

테스트 구조

  • tests/devhub_cms_mcp/test_mcp_integration.py : MCP 통합 엔드포인트에 대한 테스트

Available Tools

10 tools
create_blog_postB

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+
ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes
titleYes
contentYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions that content 'Should not include a <h1> tag, only h2+' which is useful behavioral guidance, but fails to disclose critical aspects: whether this is a mutation (implied but not stated), what permissions are needed, whether the post is published immediately or saved as draft, what happens on success/failure, or what the return value contains. For a creation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose. The parameter explanations are organized in a clear 'Args:' section. While efficient, the 'Prompt the user for this ID' note could be more concise, and the formatting constraint for content might belong in a separate guidelines section rather than inline with the parameter definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 3-parameter creation tool with no annotations and no output schema, the description does an adequate job but has clear gaps. It covers parameter meanings well and provides some behavioral guidance about HTML formatting, but misses critical context about the mutation nature, permissions, publication status, and return values. The description is minimally viable but incomplete for a tool that creates content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides excellent parameter semantics despite 0% schema description coverage. It explains what each parameter represents: 'Website ID where the post will be published' for site_id, 'Blog post title' for title, and 'HTML content of blog post' with specific formatting constraints for content. The 'Prompt the user for this ID' guidance for site_id adds practical usage context. This fully compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and resource 'blog post', making the purpose immediately understandable. It distinguishes from siblings like 'update_blog_post' by specifying 'new', but doesn't fully differentiate from other creation tools that might exist (though none are listed as siblings). The purpose is specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. While it mentions 'Prompt the user for this ID' for site_id, this is parameter guidance rather than tool selection advice. There's no mention of prerequisites, when not to use it, or how it differs from similar operations like 'update_blog_post' beyond the obvious creation vs. update distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_blog_postC

Get a single blog post

Args:
    post_id: Blog post id
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Get[s] a single blog post', which implies a read-only operation, but doesn't clarify aspects like authentication requirements, error handling (e.g., what happens if the post_id doesn't exist), rate limits, or response format. This leaves significant gaps in understanding how the tool behaves in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear purpose statement followed by parameter details in a labeled section. It avoids unnecessary fluff and is front-loaded with the main functionality. However, the 'Args' section could be integrated more seamlessly, and there's room for slight improvement in flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, no output schema, no annotations), the description is incomplete. It lacks information on return values, error conditions, and behavioral traits, which are crucial for a read operation. Without annotations or an output schema, the description should provide more context to ensure the agent can use the tool effectively, but it falls short.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description includes an 'Args' section that documents the 'post_id' parameter, adding meaning beyond the input schema, which has 0% description coverage. However, it only provides a basic label ('Blog post id') without details on format, constraints, or examples. With one parameter and low schema coverage, this compensates minimally, meeting the baseline for adequate but incomplete documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('a single blog post'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'create_blog_post' or 'update_blog_post' beyond the verb choice, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use 'get_blog_post' instead of other sibling tools like 'get_businesses' or 'get_locations', nor does it specify prerequisites or context for usage. The only implied usage is retrieving a specific blog post, but this is basic and insufficient for effective tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_businessesA

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of businesses with specific fields (id and business_name), which is useful behavioral context. However, it lacks details on error handling, pagination, or rate limits, which are important for a read operation. The description doesn't contradict any annotations, but it's not fully comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and concise, with three sentences that each add value: stating the purpose, detailing the return fields, and providing usage guidance. It's front-loaded with the core purpose. A minor point is that the second sentence could be more tightly integrated, but overall it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and 0 parameters, the description does a decent job by explaining the return format and usage assumption. However, for a tool that returns data, more details on response structure (e.g., list format, error cases) would improve completeness. It's adequate but has clear gaps in behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, which is correct. However, it doesn't add any extra semantic context beyond the schema, so it earns a baseline 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get all businesses within the DevHub account.' It specifies the verb ('Get') and resource ('businesses'), and the scope ('within the DevHub account') is well-defined. However, it doesn't explicitly differentiate from sibling tools like 'get_locations' or 'get_nearest_location', which prevents a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by stating '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.' This gives practical guidance on when to use the tool's output. However, it doesn't specify when not to use it or name explicit alternatives among siblings, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hours_of_operationA

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
ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYes
hours_typeNoprimary

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return format (list of 7 items representing days) and behavioral traits like handling of closed days and lunch breaks, but lacks details on error handling, permissions, or rate limits. It adds value beyond basic function but is incomplete for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose. It efficiently includes examples and parameter explanations, though the formatting of examples could be slightly clearer. Most sentences add value without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does well to explain the return structure and parameters. However, it lacks information on error cases, authentication needs, or rate limits, making it incomplete for a tool with 2 parameters and complex return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains 'location_id' as a 'DevHub Location ID' and 'hours_type' with its default and user specification context, adding meaningful semantics beyond the bare schema. However, it doesn't detail possible values for 'hours_type' beyond 'primary'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get the hours of operation') and resource ('for a DevHub location'), distinguishing it from sibling tools like 'get_locations' or 'update_hours'. It precisely defines what the tool does without being vague or tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_locations' or 'update_hours'. It mentions a default for 'hours_type' but lacks explicit context, prerequisites, or exclusions for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_locationsB

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
ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns a list of locations with specific fields, which is helpful, but lacks critical details such as whether it's read-only (implied by 'Get' but not explicit), pagination behavior, error handling, authentication needs, or rate limits. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a structured list of return fields. Every sentence earns its place by adding value, with no redundant or verbose language, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is moderately complete. It explains the purpose and return fields adequately, but lacks details on behavioral aspects like error handling or usage context. Without annotations or an output schema, it should do more to compensate, but it covers the basics for a simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter (business_id) with 0% description coverage, so the description must compensate. It adds meaning by clarifying that locations are retrieved 'for a business', implicitly explaining the business_id parameter's role. However, it doesn't specify format constraints or examples, leaving some ambiguity. With 0 parameters documented in the schema, the baseline is 4, and the description partially meets this by providing contextual meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get all locations for a business' specifies the verb ('Get') and resource ('locations'), with the scope ('for a business') distinguishing it from siblings like 'get_nearest_location' or 'get_businesses'. However, it doesn't explicitly differentiate from potential similar tools beyond the business context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid business_id), exclusions, or comparisons to siblings like 'get_nearest_location' or 'get_businesses', leaving usage context implied at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_nearest_locationB

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
ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYes
latitudeYes
longitudeYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it 'Get's data, implying a read-only operation, but doesn't cover critical aspects like authentication needs, rate limits, error handling, or what the return format looks like (e.g., distance, address details). This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, with the core purpose stated first followed by parameter details. The parameter explanations are efficient, though the formatting with 'Args:' could be slightly more polished for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (3 required parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what the tool returns (e.g., nearest location details, distance metrics), error conditions, or behavioral traits like performance or dependencies, leaving the agent with insufficient context for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful context beyond the input schema, which has 0% description coverage. It explains that 'business_id' is a 'DevHub Business ID associated with the location' and instructs to 'Prompt the user for this ID', and clarifies that 'latitude' and 'longitude' refer to 'the location' (presumably the user's or a target location). This compensates well for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'nearest DevHub location', making the purpose specific and understandable. However, it doesn't differentiate from sibling tools like 'get_locations' or 'get_businesses', which might have overlapping functionality for location-related queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_locations' or 'get_businesses'. The description lacks context about prerequisites, exclusions, or specific use cases, leaving the agent with no directional cues for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

site_from_urlA

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
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool returns site details (ID, URL, location IDs) and can prompt for user input, which adds useful behavioral context. However, it lacks details on error handling, permissions, or rate limits, leaving gaps for a tool that fetches data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized: it starts with the core purpose, adds usage notes, lists return values, and details parameters. Each sentence adds value, but the bulleted return list could be slightly more concise. Overall, it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 1 parameter with low schema coverage, the description is moderately complete. It covers the purpose, parameter semantics, and return values, but lacks error handling, authentication needs, or examples. For a data-fetching tool, this leaves some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 1 parameter with 0% description coverage, so the description must compensate. It adds meaning by specifying the 'url' parameter format: 'all lowercase and ends with a slash.' This provides critical syntax details beyond the schema's basic string type, though it doesn't cover all potential edge cases (e.g., validation rules).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the DevHub site ID from a URL.' This specifies the verb ('Get') and resource ('DevHub site ID'), and distinguishes it from sibling tools like 'get_locations' or 'get_businesses' by focusing on site identification from a URL. However, it doesn't explicitly differentiate from all siblings (e.g., 'get_nearest_location' might also involve URLs), keeping it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context: 'Can prompt the user for the URL instead of passing a site_id.' This implies an alternative input method but doesn't specify when to use this tool versus others (e.g., 'get_locations' for location data). No explicit when/when-not guidance or named alternatives are given, so it's implied rather than clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_blog_postC

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+
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes
titleNo
contentNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Update a single blog post', implying a mutation operation, but doesn't cover critical aspects like required permissions, whether changes are reversible, error handling, or response format. The HTML content guideline is useful but insufficient for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose 'Update a single blog post'. The parameter details are listed concisely, though the HTML guideline could be integrated more smoothly. There's minimal wasted text, making it efficient for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a mutation tool with 3 parameters, 0% schema description coverage, no annotations, and no output schema, the description is incomplete. It lacks information on behavioral traits (e.g., side effects, auth needs), usage context, and return values, leaving significant gaps for an AI agent to rely on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful context for parameters: it clarifies that 'post_id' is a 'Blog post ID', 'title' is a 'Blog post title', and 'content' is 'HTML content of blog post' with a specific guideline about avoiding <h1> tags. Since schema description coverage is 0%, this compensates somewhat, but it doesn't fully explain all three parameters (e.g., format of post_id, constraints on title).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' and resource 'a single blog post', making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'create_blog_post' or 'get_blog_post', though the action 'Update' implies it modifies existing posts rather than creating new ones or retrieving them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing post_id), exclusions, or comparisons to siblings like 'create_blog_post' for new posts or 'get_blog_post' for retrieval, leaving usage context unclear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_hoursA

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
ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYes
new_hoursYes
hours_typeNoprimary

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It clearly indicates this is a mutation tool ('Update'), describes the data structure (7 items representing days, 0-4 time ranges), and provides formatting examples. However, it lacks information about permissions, side effects, error conditions, or what happens to existing hours not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and well-structured: it starts with the core purpose, explains the data format, provides concrete examples, and lists parameters with explanations. Every sentence adds value, though the parameter explanations could be slightly more integrated with the initial description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description does a good job explaining parameters and data format. However, it lacks information about what the tool returns, error handling, authentication requirements, or how changes affect existing data. The examples help but don't fully compensate for missing behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining all three parameters: 'location_id' identifies the target, 'new_hours' is described in detail with structure and examples, and 'hours_type' is explained with its default value and optional nature. The description adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Update'), resource ('hours of operation for a DevHub location'), and scope (days of the week with time ranges). It distinguishes from sibling tools like 'get_hours_of_operation' by focusing on modification rather than retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when updating hours for a DevHub location, but provides no explicit guidance on when to use this tool versus alternatives like 'get_hours_of_operation' or other update tools. No prerequisites, exclusions, or comparison to siblings are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_imageB

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
ParametersJSON Schema
NameRequiredDescriptionDefault
base64_image_contentYes
filenameYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the upload action and supported formats but lacks critical behavioral details: whether this requires authentication, what permissions are needed, whether it overwrites existing files with same names, what happens on success/failure, rate limits, or what the return value contains. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and well-structured with clear sections: purpose statement, format support, and parameter explanations. Each sentence earns its place by adding value. The information is front-loaded with the core purpose first. Minor improvement could be made by integrating parameter details more seamlessly rather than using a separate 'Args:' section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It covers the basic action and parameters but misses critical context: authentication requirements, error handling, return values, file size limits, or what happens in the DevHub media gallery after upload. For a tool that modifies system state, this leaves too many unknowns for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantic context beyond the schema. While schema description coverage is 0% (titles only), the description explains that 'base64_image_content' should contain 'Base 64 encoded content of the image file' and 'filename' should be 'Filename including the extension' - providing crucial usage guidance not present in the bare schema. For 2 parameters, this adequately compensates for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Upload') and resource ('image to the DevHub media gallery'), making the purpose immediately understandable. It distinguishes from sibling tools like create_blog_post or get_locations by focusing specifically on media uploads rather than content creation or data retrieval. However, it doesn't explicitly differentiate from potential similar upload tools (though none exist in the sibling list).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. While it mentions supported image formats (webp, jpeg, png), it doesn't explain when you'd choose this over other media handling methods or what prerequisites exist (like authentication requirements or file size limits). There's no mention of when-not-to-use scenarios or comparisons with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • First observedcreate_blog_post
    • First observedget_blog_post
    • First observedget_businesses
    • First observedget_hours_of_operation
    • First observedget_locations
    • First observedget_nearest_location
    • First observedsite_from_url
    • First observedupdate_blog_post
    • First observedupdate_hours
    • First observedupload_image

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have distinct purposes, but get_hours_of_operation and update_hours are closely related and could potentially be confused due to similar naming and overlapping functionality. The other tools target clearly different resources like blog posts, businesses, locations, and images, making them easy to distinguish.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern, such as create_blog_post, get_blog_post, update_blog_post, get_businesses, get_locations, and upload_image. There are no deviations in style or convention, making the set predictable and readable.

Tool Count5/5

With 10 tools, the count is well-scoped for a CMS server covering blog posts, businesses, locations, hours, and media. Each tool serves a clear purpose, and there are no redundant or trivial additions, fitting typical expectations for such a domain.

Completeness3/5

The toolset covers blog post creation, retrieval, and update, but lacks deletion, which is a notable gap in the CRUD lifecycle. For locations and businesses, retrieval tools are present, but creation, update, and deletion are missing, leaving significant operational gaps that could hinder agent workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

Appeared in Searches