We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/allen-munsch/mcp-prefect'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
from typing import Any, Dict, List, Optional, Union
from uuid import UUID
import mcp.types as types
from prefect import get_client
from .server import mcp
@mcp.tool
async def get_block_types(
limit: Optional[int] = None,
offset: Optional[int] = None,
slug: Optional[str] = None,
) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]:
"""
Get a list of block types with optional filtering.
Args:
limit: Maximum number of block types to return
offset: Number of block types to skip
slug: Filter by slug pattern
Returns:
A list of block types with their details
"""
async with get_client() as client:
# Build filter parameters
filters = {}
if slug:
filters["slug"] = {"like_": f"%{slug}%"}
block_types = await client.read_block_types(
#
# limit=limit,
# offset=offset,
# **filters
)
block_types_result = {
"block_types": [block_type.model_dump() for block_type in block_types]
}
return [types.TextContent(type="text", text=str(block_types_result))]
@mcp.tool
async def get_block_type(
slug: str,
) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]:
"""
Get a block type by slug.
Args:
slug: The block type slug
Returns:
Block type details
"""
async with get_client() as client:
block_type = await client.read_block_type_by_slug(slug)
return [types.TextContent(type="text", text=str(block_type.model_dump()))]
@mcp.tool
async def get_block_documents(
block_type_slug: str,
limit: Optional[int] = None,
offset: Optional[int] = None,
name: Optional[str] = None,
) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]:
"""
Get block documents by block type.
Args:
block_type_slug: The block type slug
limit: Maximum number of block documents to return
offset: Number of block documents to skip
name: Filter by name pattern
Returns:
A list of block documents with their details
"""
async with get_client() as client:
# Build filter parameters
filters = {}
if block_type_slug:
filters["block_type_slug"] = {"eq_": block_type_slug}
if name:
filters["name"] = {"like_": f"%{name}%"}
block_documents = await client.read_block_documents(
limit=limit,
offset=offset,
**filters
)
block_documents_result = {
"block_documents": [block_doc.model_dump() for block_doc in block_documents]
}
return [types.TextContent(type="text", text=str(block_documents_result))]
@mcp.tool
async def get_block_document(
block_document_id: str,
) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]:
"""
Get a block document by ID.
Args:
block_document_id: The block document UUID
Returns:
Block document details
"""
async with get_client() as client:
block_document = await client.read_block_document(UUID(block_document_id))
return [types.TextContent(type="text", text=str(block_document.model_dump()))]
@mcp.tool
async def delete_block_document(
block_document_id: str,
) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]:
"""
Delete a block document by ID.
Args:
block_document_id: The block document UUID
Returns:
Confirmation message
"""
async with get_client() as client:
await client.delete_block_document(UUID(block_document_id))
return [types.TextContent(type="text", text=f"Block document '{block_document_id}' deleted successfully.")]