gr-mcp/tests/integration/test_server.py
Ryan Malloy fdc42c9bed Upgrade to FastMCP 3.0 and Python 3.14
- Bump version to 0.2.0
- Require Python 3.14+
- Update to FastMCP 3.0.0b1 with new Client API
- Update tests for FastMCP 3.0 (Pydantic models in .data)
- Pin modern dependency versions
2026-01-26 16:46:05 -07:00

53 lines
1.7 KiB
Python

import pytest
from fastmcp import Client
from main import app as mcp_app
@pytest.fixture
async def main_mcp_client():
async with Client(mcp_app) as mcp_client:
yield mcp_client
async def test_get_blocks(main_mcp_client: Client):
"""Test retrieving available blocks."""
blocks = await main_mcp_client.call_tool(name="get_blocks")
assert blocks.data is not None
# We don't know exactly what blocks are there, but should get a list
assert isinstance(blocks.data, list)
async def test_make_and_remove_block(main_mcp_client: Client):
"""Test making a block and then removing it."""
block_type = "analog_sig_source_x"
# helper to check if block exists in the flowgraph
async def get_block_names():
current_blocks = await main_mcp_client.call_tool(name="get_blocks")
# FastMCP 3.0 returns Pydantic models in .data, use attribute access
return [b.name for b in current_blocks.data]
# 1. Create a block
result = await main_mcp_client.call_tool(
name="make_block", arguments={"block_name": block_type}
)
assert result.data is not None
# The output is the new block name, likely something like "analog_sig_source_x_0"
new_block_name = str(result.data)
assert block_type in new_block_name
# Verify it exists
block_names = await get_block_names()
assert new_block_name in block_names
# 2. Remove the block
remove_result = await main_mcp_client.call_tool(
name="remove_block", arguments={"block_name": new_block_name}
)
assert remove_result.data is True
# Verify it's gone
block_names = await get_block_names()
assert new_block_name not in block_names