We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yfcyfc123234/showdoc_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""
ShowDoc 数据模型定义
"""
from typing import List, Optional, Dict, Any
from dataclasses import dataclass, field
@dataclass
class ApiDefinition:
"""API 接口定义"""
method: str # GET, POST 等
url: str
title: str
description: str = ""
request: Optional[Dict[str, Any]] = None
response: Optional[Dict[str, Any]] = None
headers: Optional[List[Dict[str, Any]]] = None
query: Optional[List[Dict[str, Any]]] = None
body: Optional[Dict[str, Any]] = None
@dataclass
class Page:
"""页面信息"""
page_id: str
page_title: str
cat_id: str
author_uid: str = ""
author_username: str = ""
api_info: Optional[ApiDefinition] = None
ext_info: Optional[Dict[str, Any]] = None
# 原始 page_content 解析后的完整数据
raw_content: Optional[Dict[str, Any]] = None
@dataclass
class Category:
"""分类节点(支持嵌套)"""
cat_id: str
cat_name: str
item_id: str
parent_cat_id: str
level: int
s_number: str = ""
pages: List[Page] = field(default_factory=list)
children: List['Category'] = field(default_factory=list) # 子分类
@dataclass
class ItemInfo:
"""文档项目信息"""
item_id: str
item_name: str
item_domain: str = ""
is_archived: str = "0"
default_page_id: Optional[str] = None
default_cat_id2: Optional[str] = None
default_cat_id3: Optional[str] = None
default_cat_id4: Optional[str] = None
@dataclass
class ApiTree:
"""完整的接口树结构"""
item_info: ItemInfo
categories: List[Category] = field(default_factory=list)
def to_dict(self) -> Dict[str, Any]:
"""转换为字典格式"""
def category_to_dict(cat: Category) -> Dict[str, Any]:
return {
"cat_id": cat.cat_id,
"cat_name": cat.cat_name,
"level": cat.level,
"parent_cat_id": cat.parent_cat_id,
"pages": [
{
"page_id": page.page_id,
"page_title": page.page_title,
"api_info": {
"method": page.api_info.method,
"url": page.api_info.url,
"title": page.api_info.title,
"description": page.api_info.description,
"request": page.api_info.request,
"response": page.api_info.response,
} if page.api_info else None
}
for page in cat.pages
],
"children": [category_to_dict(child) for child in cat.children]
}
return {
"item_info": {
"item_id": self.item_info.item_id,
"item_name": self.item_info.item_name,
},
"categories": [category_to_dict(cat) for cat in self.categories]
}