Reference
Troubleshooting
Common failure modes and practical resolution steps.
#Troubleshooting
Common errors and solutions when using the mAIvn SDK. This is the cookbook: a
specific error message, its cause, and a copy-pasteable fix. For the exception
types behind these messages — the base MaivnError, the three failure layers,
and how to structure a layered try/except — see
Errors & Exceptions.
#Common Errors
#Agent requires either a Client instance or an api_key
Error:
ValueError: Agent requires either a Client instance or an api_key.Cause: You created an Agent without providing authentication.
Solution:
# Option 1: Provide api_keyagent = Agent(name='my_agent', api_key='your-api-key') # Option 2: Use environment variable# Set MAIVN_API_KEY in your environmentimport os agent = Agent(name='my_agent', api_key=os.environ['MAIVN_API_KEY']) # Option 3: Provide a Clientclient = Client(api_key='your-api-key')agent = Agent(name='my_agent', client=client)#force_final_tool and targeted_tools are mutually exclusive
Error:
ValueError: force_final_tool and targeted_tools are mutually exclusive.Cause: You specified both options in invoke().
Solution: Choose one or the other:
# Option 1: Force final toolresponse = agent.invoke(messages, force_final_tool=True) # Option 2: Target specific toolsresponse = agent.invoke(messages, targeted_tools=['tool_a', 'tool_b'])#Multiple tools marked with final_tool=True
Error:
TOOL CONFIGURATION ERROR================================================================================[ERROR] Multiple tools marked with final_tool=True: 'Report', 'Summary' SCOPE: Agent 'my_agent' ISSUE: Only ONE tool can be designated as the final output tool. FIX: Remove 'final_tool=True' from all but one tool.================================================================================Cause: More than one tool is marked as the final output.
Solution: Keep only one final tool:
@agent.toolify(final_tool=True)class Report(BaseModel): ... @agent.toolify() # Remove final_tool=Trueclass Summary(BaseModel): ...#Argument not found in function signature
Error:
ValueError: Argument 'data' specified in dependency decoratornot found in function 'my_tool' signature: (result: dict) -> dictCause: The arg_name in a decorator doesn't match the function parameter.
Solution: Use the correct parameter name:
# Wrong: arg_name doesn't match@depends_on_tool(other_tool, arg_name='data')def my_tool(result: dict) -> dict: ... # Correct: arg_name matches parameter@depends_on_tool(other_tool, arg_name='result')def my_tool(result: dict) -> dict: ...#force_final_tool requires at least one tool with final_tool=True
Error:
ValueError: force_final_tool=True requires at least one tool with final_tool=True.Agent 'my_agent' has 3 tool(s) but none are final.Cause: You used force_final_tool=True but no tool is marked as final.
Solution: Mark one tool as final:
@agent.toolify(final_tool=True) # Add final_tool=Trueclass FinalOutput(BaseModel): result: str # Or register the final model imperatively.agent.add_tool(FinalOutput, final_tool=True)If you use constructor-based tools, raw functions and models are registered with default
tool options. Use agent.add_tool(..., final_tool=True) when a Pydantic model must be the
agent's final tool.
#Connection errors
Error:
httpx.ConnectError: [Errno 111] Connection refusedCause: Cannot connect to the mAIvn server.
Solutions:
- Check that the mAIvn server is running
- Verify the server URL in configuration
- Check network connectivity
- Verify firewall rules
#Timeout errors
Error:
httpx.ReadTimeout: timed outCause: Request took longer than the timeout.
Solutions:
# Increase timeoutclient = Client( api_key='...', timeout=120, # HTTP timeout tool_execution_timeout=600, # Per-tool timeout total_execution_timeout=3600, # Total session timeout)#MCP server startup failure
Error:
ValueError: STDIO MCPServer requires a command or auto_setupCause: MCP server configuration is incomplete.
Solution:
# Provide commandMCPServer( name='my_server', transport='stdio', command='my-mcp-server', # Add this) # Or use auto_setupMCPServer( name='my_server', transport='stdio', auto_setup=MCPAutoSetup(package='my-mcp-package'),)#Memory retrieval returns no hits
Symptoms:
- Follow-up turns do not recall prior details
memory_retrievedappears with low/zero hit count
Checks:
- Reuse the same
thread_idacross turns. - Confirm memory is enabled (
memory_config.enabled=True, or omit it and rely on scope defaults). - Confirm retrieval is enabled via
memory_config.level(glimpse,focus, orclarity). - Verify org/project policy does not downscope memory behavior.
- If testing immediately after a seed turn, wait briefly and retry (indexing is async).
#`memory_indexed` not observed
Cause (common):
- Persistence not enabled at effective policy level, or write path was downscoped by config.
Checks:
- Confirm
memory_config.levelsupports persistence (focusorclarity). - Confirm
memory_config.levelis not downscoped by policy. - Confirm workspace policy permits requested persistence mode.
- Inspect enrichment stream for
memory_indexing/memory_indexedevents.
#Context still too large in long threads
Checks:
- Ensure
memory_config.summarization_enabledis not disabled for the run. - Keep prompts focused and avoid repeated full-history payloads when not needed.
- Use event tracing (
agent.events().invoke(...)) to verify summarize phases are emitted.
#Debugging
#Enable Event Tracing
See detailed execution information:
response = agent.events().invoke(messages)#Configure Logging
Set up file logging:
from pathlib import Pathfrom maivn import configure_logging log_file = Path('logs/maivn.log')log_file.parent.mkdir(exist_ok=True) logger = configure_logging(log_file)#Check Log Level
Set debug level for more detail:
export MAIVN_LOG_LEVEL=DEBUG#Inspect Tool Registration
List registered tools:
for tool in agent.list_tools(): print(f'{tool.name}: {tool.description}') print(f' final_tool: {getattr(tool, "final_tool", False)}') print(f' dependencies: {getattr(tool, "dependencies", [])}')#Compile State Without Executing
See what would be sent to the server:
state = agent.compile_state(messages)print(f'Tools: {len(state.tools)}')print(f'Private data keys: {list(state.private_data.keys())}')#FAQ
#How do I reuse a thread for multi-turn conversation?
# First turnresponse1 = agent.invoke( [HumanMessage(content='Hello')], thread_id='my-conversation',) # Second turn (same thread_id)response2 = agent.invoke( [HumanMessage(content='Follow up')], thread_id='my-conversation',)#Why isn't my tool being called?
- Check the description - Make it clear when the tool should be used
- Check the system prompt - Guide the LLM to use your tools
- Use event tracing - Run with
agent.events().invoke(...)to inspect decisions - Check tool registration - Use
agent.list_tools()
#How do I handle large tool catalogs?
Use max_results to limit semantic search (final/targeted tools and dependencies may increase the total tool count):
agent = Agent( name='large_catalog', max_results=10, # Only return top 10 matching tools api_key='...',)#How do I cancel a running invocation?
Currently, cancellation must be done at the server level. The SDK doesn't support client-side cancellation.
#Why are my private data values appearing in logs?
They shouldn't be. If you see this:
- Check that you're using
@depends_on_private_datacorrectly - Ensure you're not manually logging the values in your tools
- Report this as a potential bug if automatic redaction isn't working
#Environment Checklist
Before debugging, verify:
- An API key is available to your app and passed to
AgentorClient - mAIvn server is running and accessible
- Network connectivity to server
- Correct Python version (3.10+)
- All dependencies installed (
uv syncorpip install maivn)
#Getting Help
If you're still stuck:
- Check the API Reference
- Review the Guides
- Run a known-good app in mAIvn Studio and compare event traces
- Inspect a failing run from the Executions explorer in the developer portal
#See Also
- Errors & Exceptions - The exception types behind these messages, the three failure layers, and layered handling patterns
- Logging Reference - SDK logging
- Configuration Reference - Environment variables
- Best Practices - Recommended patterns