feat: add MCP protocol compliance tests
This commit is contained in:
57
tests/integration/test_mcp_protocol.py
Normal file
57
tests/integration/test_mcp_protocol.py
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
"""Test MCP protocol compliance over SSE transport."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_mcp_connection_initializes(mcp_client):
|
||||||
|
"""Test that MCP client can connect and initialize."""
|
||||||
|
# If we get here, connection and initialization succeeded
|
||||||
|
assert mcp_client is not None
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_tools_returns_all_tools(mcp_client):
|
||||||
|
"""Test that list_tools returns all expected tools."""
|
||||||
|
result = await mcp_client.list_tools()
|
||||||
|
tool_names = [tool.name for tool in result.tools]
|
||||||
|
|
||||||
|
expected_tools = [
|
||||||
|
"list_documents",
|
||||||
|
"list_tables",
|
||||||
|
"describe_table",
|
||||||
|
"get_records",
|
||||||
|
"sql_query",
|
||||||
|
"add_records",
|
||||||
|
"update_records",
|
||||||
|
"delete_records",
|
||||||
|
"create_table",
|
||||||
|
"add_column",
|
||||||
|
"modify_column",
|
||||||
|
"delete_column",
|
||||||
|
]
|
||||||
|
|
||||||
|
for expected in expected_tools:
|
||||||
|
assert expected in tool_names, f"Missing tool: {expected}"
|
||||||
|
|
||||||
|
assert len(result.tools) == 12
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_tools_has_descriptions(mcp_client):
|
||||||
|
"""Test that all tools have descriptions."""
|
||||||
|
result = await mcp_client.list_tools()
|
||||||
|
|
||||||
|
for tool in result.tools:
|
||||||
|
assert tool.description, f"Tool {tool.name} has no description"
|
||||||
|
assert len(tool.description) > 10, f"Tool {tool.name} description too short"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_list_tools_has_input_schemas(mcp_client):
|
||||||
|
"""Test that all tools have input schemas."""
|
||||||
|
result = await mcp_client.list_tools()
|
||||||
|
|
||||||
|
for tool in result.tools:
|
||||||
|
assert tool.inputSchema is not None, f"Tool {tool.name} has no inputSchema"
|
||||||
|
assert "type" in tool.inputSchema, f"Tool {tool.name} schema missing type"
|
||||||
Reference in New Issue
Block a user