Tool 'stamp' raised an unexpected exception
Traceback (most recent call last):
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/base.py", line 179, in run
    result = await self.fn_metadata.call_fn(self.fn, self.is_async, validated, pass_directly)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/utilities/func_metadata.py", line 164, in call_fn
    return await anyio.to_thread.run_sync(functools.partial(fn, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/to_thread.py", line 65, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2779, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 1124, in run
    result = context.run(func, *args)
  File "/workspace/n329/mcp/server.py", line 70, in stamp
    return request('/functions/createMoment', {'sha256Hash': valid_hash(hash)})
                                                             ~~~~~~~~~~^^^^^^
  File "/workspace/n329/mcp/server.py", line 45, in valid_hash
    raise ValueError('hash must be exactly 64 hexadecimal characters')
ValueError: hash must be exactly 64 hexadecimal characters

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/server.py", line 442, in _handle_call_tool
    return await self.call_tool(params.name, params.arguments or {}, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/server.py", line 548, in call_tool
    return await self._tool_manager.call_tool(name, arguments, context, convert_result=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/tool_manager.py", line 87, in call_tool
    return await tool.run(arguments, context, convert_result=convert_result)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/base.py", line 213, in run
    raise UnexpectedToolError(f"Error executing tool {self.name}") from exc
mcp.server.mcpserver.exceptions.UnexpectedToolError: Error executing tool stamp
Tool 'first_at' raised an unexpected exception
Traceback (most recent call last):
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/base.py", line 179, in run
    result = await self.fn_metadata.call_fn(self.fn, self.is_async, validated, pass_directly)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/utilities/func_metadata.py", line 164, in call_fn
    return await anyio.to_thread.run_sync(functools.partial(fn, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/to_thread.py", line 65, in run_sync
    return await get_async_backend().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2779, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 1124, in run
    result = context.run(func, *args)
  File "/workspace/n329/mcp/server.py", line 84, in first_at
    raise ValueError('height must be an integer >= 0')
ValueError: height must be an integer >= 0

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/server.py", line 442, in _handle_call_tool
    return await self.call_tool(params.name, params.arguments or {}, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/server.py", line 548, in call_tool
    return await self._tool_manager.call_tool(name, arguments, context, convert_result=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/tool_manager.py", line 87, in call_tool
    return await tool.run(arguments, context, convert_result=convert_result)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/n329/mcp/.venv/lib/python3.13/site-packages/mcp/server/mcpserver/tools/base.py", line 213, in run
    raise UnexpectedToolError(f"Error executing tool {self.name}") from exc
mcp.server.mcpserver.exceptions.UnexpectedToolError: Error executing tool first_at
Tool 'first_at' rejected arguments: ['height']
Tool 'first_at' rejected arguments: ['height']
PASS initialize/tools/list/tools/call: stamp mocked success
PASS initialize/tools/list/tools/call: stamp HTTP 400
PASS initialize/tools/list/tools/call: stamp HTTP 429
PASS initialize/tools/list/tools/call: pending proof
PASS initialize/tools/list/tools/call: height_asserted proof
PASS initialize/tools/list/tools/call: confirmed missing proof
PASS initialize/tools/list/tools/call: confirmed proof
PASS initialize/tools/list/tools/call: first null
PASS initialize/tools/list/tools/call: first rechecks proof True
PASS initialize/tools/list/tools/call: first rechecks proof False
PASS initialize/tools/list/tools/call: height zero no HTTP
PASS initialize/tools/list/tools/call: invalid {'hash': 'no'}
PASS initialize/tools/list/tools/call: invalid {'hash': '019bd3056ae35f6eee3f61fcabdaabcfe5f374c07168a7e4d6fa38a828cbac2f', 'height': -1}
PASS initialize/tools/list/tools/call: invalid {'hash': '019bd3056ae35f6eee3f61fcabdaabcfe5f374c07168a7e4d6fa38a828cbac2f', 'height': True}
PASS initialize/tools/list/tools/call: invalid {'hash': '019bd3056ae35f6eee3f61fcabdaabcfe5f374c07168a7e4d6fa38a828cbac2f', 'height': 1.5}
PASS OUR LIVE GET PROBE (not M1): a-hash-is-a-door-that-2026-019bd305@965906
