This commit is contained in:
John Lancaster
2026-06-21 17:35:01 -05:00
parent c189677717
commit 36347ff4a5
6 changed files with 297 additions and 151 deletions
+8 -50
View File
@@ -4,57 +4,15 @@ from typing import Any
from personal_mcp.registry.contracts import DocsRegistry
from personal_mcp.registry.models.registry import PromptRecord
from personal_mcp.registry.models.registry import PromptSummaryPayload
from personal_mcp.registry.models.registry import SkillPatternPayload
from personal_mcp.registry.models.registry import SkillRecord
from personal_mcp.registry.models.registry import SkillSummaryPayload
DEFAULT_LIMIT = 20
MAX_LIMIT = 100
def _pattern_payload(skill: SkillRecord) -> dict[str, Any]:
return {
"id": skill.skill_id,
"name": skill.name,
"version": skill.version,
"description": skill.description,
"tags": list(skill.tags),
"depends_on": list(skill.depends_on),
"capabilities": list(skill.capabilities),
"resources": list(skill.capabilities),
}
def _summary_payload(skill: SkillRecord) -> dict[str, Any]:
return {
"id": skill.skill_id,
"name": skill.name,
"description": skill.description,
"tags": list(skill.tags),
"capabilities": list(skill.capabilities),
"version": skill.version,
"document_uri": skill.document_uri,
"detail_uri": f"resource://catalog/skills/{skill.skill_id}",
"resources": {
"document": skill.document_uri,
"references": [
f"resource://skills/{skill.skill_id}/references/{ref_id}" for ref_id in sorted(skill.references)
],
},
}
def _prompt_summary_payload(prompt: PromptRecord) -> dict[str, Any]:
return {
"id": prompt.prompt_id,
"name": prompt.name,
"description": prompt.description,
"tags": list(prompt.tags),
"capabilities": list(prompt.capabilities),
"version": prompt.version,
"document_uri": prompt.document_uri,
"detail_uri": f"resource://catalog/prompts/{prompt.prompt_id}",
}
def _skill_matches(
skill: SkillRecord,
*,
@@ -130,7 +88,7 @@ def build_skills_index_payload(
next_cursor = start + normalized_limit
return {
"skills": [_summary_payload(skill) for skill in page],
"skills": [SkillSummaryPayload.from_record(skill).model_dump() for skill in page],
"total": len(matches),
"cursor": str(start),
"limit": normalized_limit,
@@ -187,7 +145,7 @@ def build_prompts_index_payload(
next_cursor = start + normalized_limit
return {
"prompts": [_prompt_summary_payload(prompt) for prompt in page],
"prompts": [PromptSummaryPayload.from_record(prompt).model_dump() for prompt in page],
"total": len(matches),
"cursor": str(start),
"limit": normalized_limit,
@@ -240,7 +198,7 @@ def search_patterns_payload(
page = matches[normalized_skip : normalized_skip + normalized_limit]
return {
"patterns": [_pattern_payload(skill) for skill in page],
"patterns": [SkillPatternPayload.from_record(skill).model_dump() for skill in page],
"total": len(matches),
"skip": normalized_skip,
"limit": normalized_limit,
@@ -250,7 +208,7 @@ def search_patterns_payload(
def get_pattern_by_id_payload(registry: DocsRegistry, skill_id: str) -> dict[str, Any]:
if skill_id not in registry.skills_by_id:
return {"found": False, "id": skill_id}
return {"found": True, "pattern": _pattern_payload(registry.skills_by_id[skill_id])}
return {"found": True, "pattern": SkillPatternPayload.from_record(registry.skills_by_id[skill_id]).model_dump()}
def search_prompts_payload(
@@ -277,7 +235,7 @@ def search_prompts_payload(
page = matches[normalized_skip : normalized_skip + normalized_limit]
return {
"prompts": [_prompt_summary_payload(prompt) for prompt in page],
"prompts": [PromptSummaryPayload.from_record(prompt).model_dump() for prompt in page],
"total": len(matches),
"skip": normalized_skip,
"limit": normalized_limit,