Add tool wrappers for Claude Desktop compatibility (v1.0.3)

- Add tool wrappers for all resource endpoints to ensure Claude Desktop can access them
- Implement hybrid approach: resources for MCP spec compliance, tools for practical usage
- Add 5 new tool wrappers: list_domains_tool, get_domain_tool, list_records_tool, get_record_tool, analyze_domain_tool
- Update documentation to reflect the hybrid approach
- Bump version to 1.0.3

This ensures compatibility with Claude Desktop while maintaining MCP best practices.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ryan Malloy 2025-07-16 14:51:04 -06:00
parent 691963a43b
commit ce640e2ee5
5 changed files with 72 additions and 3 deletions

View File

@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.3] - 2025-01-16
### Added
- Tool wrappers for resource access to ensure Claude Desktop compatibility
- `list_domains_tool()` - wrapper for dns://domains resource
- `get_domain_tool()` - wrapper for dns://domains/{domain} resource
- `list_records_tool()` - wrapper for dns://domains/{domain}/records resource
- `get_record_tool()` - wrapper for dns://domains/{domain}/records/{record_id} resource
- `analyze_domain_tool()` - wrapper for dns://domains/{domain}/analysis resource
### Technical
- Hybrid approach: resources for direct MCP access, tools for Claude Desktop compatibility
- Maintains both patterns to support different MCP client implementations
## [1.0.2] - 2025-01-16 ## [1.0.2] - 2025-01-16
### Changed ### Changed

View File

@ -139,12 +139,13 @@ vultr-dns-mcp/
- 12 comprehensive DNS management tools - 12 comprehensive DNS management tools
- **Important**: FastMCP's `run()` method is synchronous, not async. Do not wrap with `asyncio.run()` - **Important**: FastMCP's `run()` method is synchronous, not async. Do not wrap with `asyncio.run()`
### MCP Tools (12 total) ### MCP Tools (17 total)
- Domain management: list, create, delete, get details - Domain management: list, create, delete, get details
- DNS record operations: CRUD for all record types - DNS record operations: CRUD for all record types
- Validation: Pre-creation validation with suggestions - Validation: Pre-creation validation with suggestions
- Analysis: Configuration analysis with security recommendations - Analysis: Configuration analysis with security recommendations
- Setup utilities: Quick website and email DNS configuration - Setup utilities: Quick website and email DNS configuration
- Resource access tools: Tool wrappers for Claude Desktop compatibility
### Enhanced Error Handling ### Enhanced Error Handling
- Custom exception hierarchy: VultrAPIError, VultrAuthError, VultrRateLimitError, etc. - Custom exception hierarchy: VultrAPIError, VultrAuthError, VultrRateLimitError, etc.

View File

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "vultr-dns-mcp" name = "vultr-dns-mcp"
version = "1.0.2" version = "1.0.3"
description = "A comprehensive Model Context Protocol (MCP) server for managing Vultr DNS records" description = "A comprehensive Model Context Protocol (MCP) server for managing Vultr DNS records"
readme = "README.md" readme = "README.md"
license = {text = "MIT"} license = {text = "MIT"}

View File

@ -1,4 +1,4 @@
"""Version information for vultr-dns-mcp package.""" """Version information for vultr-dns-mcp package."""
__version__ = "1.0.2" __version__ = "1.0.3"
__version_info__ = tuple(int(i) for i in __version__.split(".") if i.isdigit()) __version_info__ = tuple(int(i) for i in __version__.split(".") if i.isdigit())

View File

@ -190,6 +190,60 @@ def create_vultr_mcp_server(api_key: Optional[str] = None) -> FastMCP:
return records return records
# Tool wrappers for resources (for compatibility with Claude Desktop)
@mcp.tool
async def list_domains_tool() -> List[Dict[str, Any]]:
"""List all DNS domains in your Vultr account.
This is a tool wrapper for the dns://domains resource.
"""
return await list_dns_domains()
@mcp.tool
async def get_domain_tool(domain: str) -> Dict[str, Any]:
"""Get details for a specific DNS domain.
Args:
domain: The domain name to get details for
This is a tool wrapper for the dns://domains/{domain} resource.
"""
return await get_dns_domain(domain)
@mcp.tool
async def list_records_tool(domain: str) -> List[Dict[str, Any]]:
"""List all DNS records for a domain.
Args:
domain: The domain name to list records for
This is a tool wrapper for the dns://domains/{domain}/records resource.
"""
return await list_dns_records(domain)
@mcp.tool
async def get_record_tool(domain: str, record_id: str) -> Dict[str, Any]:
"""Get details for a specific DNS record.
Args:
domain: The domain name
record_id: The record ID to get details for
This is a tool wrapper for the dns://domains/{domain}/records/{record_id} resource.
"""
return await get_dns_record(domain, record_id)
@mcp.tool
async def analyze_domain_tool(domain: str) -> Dict[str, Any]:
"""Analyze DNS configuration for a domain and provide recommendations.
Args:
domain: The domain name to analyze
This is a tool wrapper for the dns://domains/{domain}/analysis resource.
"""
return await analyze_dns_records(domain)
return mcp return mcp