From e93462ec3b1eee2d8ea2a9567b3f20b5f88dfb82 Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:46:53 -0500 Subject: [PATCH] better tagging --- .../SKILL.md | 1 + docs/skills/fastapi-uv-docker/SKILL.md | 1 + docs/skills/nicegui-ui-customization/SKILL.md | 1 + docs/skills/pytest-scaffolding/SKILL.md | 4 ++ tests/web/test_mcp_skills.py | 67 +++++++++++++++++++ 5 files changed, 74 insertions(+) diff --git a/docs/skills/fastapi-async-sqlalchemy-modernization/SKILL.md b/docs/skills/fastapi-async-sqlalchemy-modernization/SKILL.md index 60c3135..400438e 100644 --- a/docs/skills/fastapi-async-sqlalchemy-modernization/SKILL.md +++ b/docs/skills/fastapi-async-sqlalchemy-modernization/SKILL.md @@ -8,6 +8,7 @@ x-personal-mcp: - fastapi - sqlalchemy - async + - asyncio - modernization capabilities: - resource://skills/fastapi-async-sqlalchemy-modernization/document diff --git a/docs/skills/fastapi-uv-docker/SKILL.md b/docs/skills/fastapi-uv-docker/SKILL.md index 3e527c8..2413940 100644 --- a/docs/skills/fastapi-uv-docker/SKILL.md +++ b/docs/skills/fastapi-uv-docker/SKILL.md @@ -7,6 +7,7 @@ x-personal-mcp: tags: - fastapi - uv + - uvicorn - docker capabilities: - resource://skills/fastapi-uv-docker/document diff --git a/docs/skills/nicegui-ui-customization/SKILL.md b/docs/skills/nicegui-ui-customization/SKILL.md index a207fbd..d76c479 100644 --- a/docs/skills/nicegui-ui-customization/SKILL.md +++ b/docs/skills/nicegui-ui-customization/SKILL.md @@ -6,6 +6,7 @@ x-personal-mcp: version: 1.0.0 tags: - nicegui + - fastapi - ui - customization - frontend diff --git a/docs/skills/pytest-scaffolding/SKILL.md b/docs/skills/pytest-scaffolding/SKILL.md index 72f20c0..375cfb0 100644 --- a/docs/skills/pytest-scaffolding/SKILL.md +++ b/docs/skills/pytest-scaffolding/SKILL.md @@ -8,6 +8,10 @@ x-personal-mcp: - pytest - testing - python + - fastapi + - asyncio + - anyio + - deterministic capabilities: - resource://skills/pytest-scaffolding/document --- diff --git a/tests/web/test_mcp_skills.py b/tests/web/test_mcp_skills.py index e4331a0..4f608b7 100644 --- a/tests/web/test_mcp_skills.py +++ b/tests/web/test_mcp_skills.py @@ -1,5 +1,7 @@ from __future__ import annotations +import json + import pytest pytestmark = pytest.mark.smoke @@ -28,6 +30,30 @@ TOOL_NAME_PARAMETERS = tuple( ) +SEARCH_QUERY_PARAMETERS = ( + pytest.param( + "pytest", + {"pytest-scaffolding"}, + id="query-pytest", + ), + pytest.param( + "asyncio", + {"pytest-scaffolding", "fastapi-async-sqlalchemy-modernization"}, + id="query-asyncio", + ), + pytest.param( + "fastapi testing", + {"pytest-scaffolding"}, + id="query-fastapi-testing", + ), + pytest.param( + "asyncio fastapi testing deterministic pytest", + {"pytest-scaffolding"}, + id="query-composite-async-fastapi-testing-deterministic-pytest", + ), +) + + RESOURCE_URI_PARAMETERS = tuple( pytest.param( resource_uri, @@ -72,6 +98,35 @@ class TestMcpCatalogSurface: assert result.isError is False assert result.content + @pytest.mark.parametrize( + ("query", "expected_skill_ids"), + SEARCH_QUERY_PARAMETERS, + ) + @pytest.mark.asyncio + async def test_search_patterns_matches_expected_skills_for_query_terms( + self, + mcp_session_factory, + query: str, + expected_skill_ids: set[str], + ) -> None: + """Ensures query terms return expected skill IDs from search_patterns.""" + async with mcp_session_factory() as mcp_session: + result = await mcp_session.call_tool( + "search_patterns", + { + "query": query, + "limit": 20, + }, + ) + + assert result.isError is False + assert result.content + + payload = json.loads(result.content[0].text) + found_skill_ids = {pattern["id"] for pattern in payload["patterns"]} + + assert expected_skill_ids.issubset(found_skill_ids) + class TestResources: """Covers MCP resource and resource-template discovery.""" @@ -99,6 +154,18 @@ class TestMcpCatalogSurface: assert "resource://skills/{skill_id}/document" in template_uris assert "resource://prompts/{prompt_id}/document" in template_uris + @pytest.mark.asyncio + async def test_reads_mcp_details_skill_document(self, mcp_session_factory) -> None: + """Ensures read_resource resolves the mcp-details skill document URI.""" + async with mcp_session_factory() as mcp_session: + result = await mcp_session.call_tool( + "read_resource", + {"uri": "resource://skills/mcp-details/document"}, + ) + + assert result.isError is False + assert result.content + class TestPrompts: """Covers MCP prompt discovery surface."""