1111
1212import pytest
1313from inline_snapshot import snapshot
14- from mcp_types import INVALID_PARAMS , METHOD_NOT_FOUND , Resource
14+ from mcp_types import INTERNAL_ERROR , INVALID_PARAMS , METHOD_NOT_FOUND , Resource
1515from pydantic import BaseModel , ConfigDict
1616
1717from mcp .client .client import Client
@@ -135,8 +135,8 @@ async def private_list(ctx: ServerRequestContext[Any, Any], params: ListSkillsPa
135135
136136async def test_skills_list_rejects_a_handler_result_with_an_invalid_skill () -> None :
137137 """SDK-defined: a `list_skills` handler bug (a non-conformant skill entry) is caught
138- before it reaches the client, as an Invalid params error rather than a silently
139- non-conformant listing."""
138+ before it reaches the client, as an Internal error — the fault is the server's, not the
139+ caller's params — rather than a silently non-conformant listing."""
140140
141141 async def bad_list (ctx : ServerRequestContext [Any , Any ], params : ListSkillsParams ) -> ListSkillsResult :
142142 return ListSkillsResult (
@@ -147,7 +147,7 @@ async def bad_list(ctx: ServerRequestContext[Any, Any], params: ListSkillsParams
147147 async with Client (server ) as client :
148148 with pytest .raises (MCPError ) as exc_info :
149149 await client .session .send_request (ListSkillsRequest (), ListSkillsResult )
150- assert exc_info .value .code == INVALID_PARAMS
150+ assert exc_info .value .code == INTERNAL_ERROR
151151
152152
153153async def test_skills_get_returns_the_matching_skill () -> None :
@@ -196,7 +196,7 @@ async def test_skills_get_rejects_a_uri_that_does_not_end_in_skill_md() -> None:
196196
197197async def test_skills_get_rejects_a_handler_that_returns_a_mismatched_uri () -> None :
198198 """SDK-defined: a `get_skill` handler bug (returning the wrong skill) is caught before
199- it reaches the client, as an Invalid params error rather than a silently wrong answer."""
199+ it reaches the client, as an Internal error rather than a silently wrong answer."""
200200
201201 async def wrong_skill (ctx : ServerRequestContext [Any , Any ], params : GetSkillParams ) -> GetSkillResult :
202202 return GetSkillResult (skill = _git_workflow_skill ())
@@ -207,12 +207,12 @@ async def wrong_skill(ctx: ServerRequestContext[Any, Any], params: GetSkillParam
207207 await client .session .send_request (
208208 GetSkillRequest (params = GetSkillParams (uri = "skill://other/SKILL.md" )), GetSkillResult
209209 )
210- assert exc_info .value .code == INVALID_PARAMS
210+ assert exc_info .value .code == INTERNAL_ERROR
211211
212212
213213async def test_skills_get_rejects_a_matching_but_non_conformant_skill () -> None :
214214 """SDK-defined: a `get_skill` handler bug (a non-conformant skill body, distinct from a
215- URI mismatch) is caught the same way, as an Invalid params error."""
215+ URI mismatch) is caught the same way, as an Internal error."""
216216
217217 async def bad_skill (ctx : ServerRequestContext [Any , Any ], params : GetSkillParams ) -> GetSkillResult :
218218 return GetSkillResult (
@@ -223,7 +223,7 @@ async def bad_skill(ctx: ServerRequestContext[Any, Any], params: GetSkillParams)
223223 async with Client (server ) as client :
224224 with pytest .raises (MCPError ) as exc_info :
225225 await client .session .send_request (GetSkillRequest (params = GetSkillParams (uri = _SKILL_URI )), GetSkillResult )
226- assert exc_info .value .code == INVALID_PARAMS
226+ assert exc_info .value .code == INTERNAL_ERROR
227227
228228
229229async def test_missing_uri_param_is_rejected_before_the_handler_runs () -> None :
@@ -277,6 +277,9 @@ async def test_directory_read_rejects_a_trailing_slash_uri() -> None:
277277
278278
279279async def test_directory_read_rejects_a_handler_result_with_a_grandchild () -> None :
280+ """SDK-defined: a `read_directory` handler bug (a non-direct child) is a server fault,
281+ surfaced as an Internal error, not the caller's Invalid params."""
282+
280283 async def bad_directory (ctx : ServerRequestContext [Any , Any ], params : ReadDirectoryParams ) -> ReadDirectoryResult :
281284 return ReadDirectoryResult (resources = [Resource (uri = "skill://git-workflow/a/b/c.md" , name = "c.md" )])
282285
@@ -288,4 +291,4 @@ async def bad_directory(ctx: ServerRequestContext[Any, Any], params: ReadDirecto
288291 await client .session .send_request (
289292 ReadDirectoryRequest (params = ReadDirectoryParams (uri = "skill://git-workflow" )), ReadDirectoryResult
290293 )
291- assert exc_info .value .code == INVALID_PARAMS
294+ assert exc_info .value .code == INTERNAL_ERROR
0 commit comments