Repository navigation
Expand file tree
/
Copy pathtutorial001.py
More file actions
54 lines (44 loc) · 1.69 KB
/
Copy pathtutorial001.py
File metadata and controls
54 lines (44 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import hashlib
from typing import Any
from mcp.server.context import ServerRequestContext
from mcp.server.mcpserver import MCPServer
from mcp.server.mcpserver.resources import TextResource
from mcp.server.skills import Skills
from mcp.shared.exceptions import MCPError
from mcp.shared.skills import (
GetSkillParams,
GetSkillResult,
ListSkillsParams,
ListSkillsResult,
Skill,
SkillResource,
)
from mcp.types import INVALID_PARAMS
SKILL_URI = "skill://git-workflow/SKILL.md"
SKILL_MD = """\
---
name: git-workflow
description: Follow this team's Git conventions for branching and commits
---
Branch from `main` using `type/short-description`. Write commit subjects in the
imperative mood, under 72 characters.
"""
GIT_WORKFLOW = Skill(
uri=SKILL_URI,
frontmatter={"name": "git-workflow", "description": "Follow this team's Git conventions for branching and commits"},
resources=[
SkillResource(
uri=SKILL_URI,
digest=f"sha256:{hashlib.sha256(SKILL_MD.encode()).hexdigest()}",
size=len(SKILL_MD.encode()),
)
],
)
async def list_skills(ctx: ServerRequestContext[Any, Any], params: ListSkillsParams) -> ListSkillsResult:
return ListSkillsResult(skills=[GIT_WORKFLOW])
async def get_skill(ctx: ServerRequestContext[Any, Any], params: GetSkillParams) -> GetSkillResult:
if params.uri != SKILL_URI:
raise MCPError(code=INVALID_PARAMS, message=f"unknown skill: {params.uri}")
return GetSkillResult(skill=GIT_WORKFLOW)
mcp = MCPServer("catalog", extensions=[Skills(list_skills=list_skills, get_skill=get_skill)])
mcp.add_resource(TextResource(uri=SKILL_URI, name="SKILL.md", mime_type="text/markdown", text=SKILL_MD))