Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)
Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
7.6 KiB
Troubleshooting
The server fails at startup with Missing config.toml
- Copy the template and fill in non-secret settings:
cp config.toml.example config.toml
- Ensure
--configpoints to the correct file when starting the server.
Database connectivity problems
Symptoms:
DatabaseError: Trino error: ...
Checklist:
- Verify host/port in
config.toml. - Verify username/password.
- Verify TLS settings:
http_schemeandverify_ssl. - Ensure
database.backend = "trino". - Run the smoke check script:
scripts/trino_smoke_check.py.
Confirmation gate blocks matching
Symptoms:
- A matching tool refuses to run and tells you to confirm requirements.
Explanation:
- Requirement capture tools write pending requirements.
- When
matching.require_confirmation = true(default), matching tools require an explicit user confirmation flow.
Additional note (multi-client environments):
- Pending/confirmed state is stored in an in-memory server session.
- If multiple clients share one server process, confirmation state can become ambiguous. In such setups, enforce the confirmation workflow strictly on the client/agent side.
Fix (recommended sequence):
- Capture/update requirements (e.g.
extract_requirements,collect_structured_requirement_data,update_requirements, guided tools). - Call
show_pending_requirements()(review table) after the last update. - Ask the user to confirm (Yes/No).
- Call
confirm_requirements(confirm=true). - Re-run the matching tool.
Optional (dev/testing):
- Set
matching.require_confirmation = falseinconfig.tomlto auto-skip confirmation.
confirm_requirements was called but matching is still blocked
Symptoms:
- The assistant called
confirm_requirements(confirm=true)but matching tools still refuse to run.
Explanation:
- The workflow is two-step: the assistant must first request user confirmation.
- The recommended sequence is:
show_pending_requirements()(review table)- Ask the user to confirm (Yes/No)
confirm_requirements(confirm=true)
Fix:
- If requirements were updated after the review step, you must re-run
show_pending_requirements()and ask the user again. - Then call
confirm_requirements(confirm=true).
Guided capture feels stuck
Guided capture is step-based. Call the tools in order:
start_guided_capture()guided_set_description(...)guided_set_role(...)guided_set_time_range(date_start?, date_end?)(open-ended ranges are allowed)guided_set_competences([...])show_pending_requirements()- Ask the user to confirm (Yes/No)
confirm_requirements(confirm=true)
"Unknown or expired search_id" (or filters/pagination stop working)
Symptoms:
get_results_by_category(...)orfilter_search_results(...)returns an error.- Newer server versions also return a machine-readable status:
META.status=unknown_or_expired
Common causes:
- TTL expiry: the search results cache is time-limited.
- Controlled by
cache.search_ttl_minutes.
- Controlled by
- Eviction due to cache size: the cache is LRU and bound by
cache.max_size.- If many searches are started, older
search_ids can be evicted even within TTL.
- If many searches are started, older
- Process mismatch / restart: in-memory caches are per server process.
- If the server restarts, or the client routes to a different instance, old
search_ids are not available.
- If the server restarts, or the client routes to a different instance, old
- Copy hygiene: some chat UIs add backticks or whitespace.
- Prefer copying the UUID from the tool output header line
SEARCH_ID=<uuid>. - Do not include backticks, quotes, or extra whitespace.
- Prefer copying the UUID from the tool output header line
Fix:
- Re-run the matching tool to create a new
search_id. - Increase
cache.search_ttl_minutesand/orcache.max_sizefor longer interactive sessions. - Ensure your MCP client uses a single long-lived server process.
"Invalid search_id format (expected UUID)"
Cause:
- The server validates
search_idinputs and rejects anything that is not a UUID.
Fix:
- Copy the value from the most recent tool output header:
Using SEARCH_ID=<uuid>(first line)- or
SEARCH_ID=<uuid>
Search tool output parsing (Cherry Studio / chat UI issues)
Search-related tools emit deterministic headers (intended to be parsed verbatim):
- First line marker:
Using SEARCH_ID=<uuid>
- Machine-readable headers:
SEARCH_ID=<uuid>FILTER_ID=<uuid>(if applicable)META=<json>
Output shape notes:
- Only
find_matching_capacitiesincludes the category-count## Summarytable. filter_search_resultsincludes an Applied Filters table and a flat results table with aCategorycolumn (it does not reprint the summary counts).get_results_by_categoryreturns a single category-page table (it does not reprint the summary counts).
If your UI hides tool output:
- Re-run the tool call, or
- manually copy the UUID from the server output and paste it without formatting.
"No matches" or unexpectedly few matches
- Confirm the required competences list is not over-specific.
- Confirm role name is reasonable (role similarity affects scoring).
- If you supplied date filters, remember availability is filter-only:
- capacities must overlap the requested range
- open-ended capacity
end_dateis treated as available without limit
Debug logging
Start the server with:
--log-level DEBUG
The database clients emit safe query logs (SQL is normalized; parameters are redacted).
Cherry Studio: stdio "connection closed" / tools not listing
Common causes:
- The server writes logs to stdout (breaks JSON-RPC). This project logs to stderr.
- Cherry cannot set a working directory, so
uv runcannot find the project.
Workaround (wrap with zsh -lc):
zsh -lc 'cd /Users/thomashandke/ws/teamlandkarte-mcp && uv run python -m teamlandkarte_mcp --config /Users/thomashandke/ws/teamlandkarte-mcp/config.toml --log-level DEBUG'
Also ensure your PATH contains your uv/uvx directory, e.g.
/Users/thomashandke/.local/bin.
Azure OpenAI API Errors
Symptoms:
- Tools that compute similarity fail with
AzureAPIError.
Common causes and fixes:
-
Missing credentials
- Ensure the environment variable is set:
AZURE_OPENAI_EMBEDDING_API_KEY
- If you rely on
.env, confirm it is loaded in the shell that starts the MCP server.
- Ensure the environment variable is set:
-
Invalid endpoint / deployment
- Check
[azure_openai].endpointinconfig.toml(must be your Azure OpenAI resource endpoint). - Check
embedding_deploymentexists in Azure and matches your deployment.
- Check
-
Rate limits / throttling (HTTP 429)
- Retry later.
- Reduce concurrency in the client/agent.
- Use the embedding cache to reduce repeated embedding calls.
-
Network / TLS / proxy issues
- Try
curlto the Azure endpoint from the same host. - If you are behind a corporate proxy, ensure the environment is configured accordingly.
- Try
Debugging tips:
- Start the server with
--log-level DEBUGand look at stderr logs. - Confirm your
config.tomlis the one the server loads (--config ...).
MCP sampling / embedding features
This server uses Azure OpenAI embeddings for embedding-based similarity scoring.
- Ensure
AZURE_OPENAI_EMBEDDING_API_KEYis set. - Ensure
[azure_openai]inconfig.tomlpoints to a valid Azure OpenAI endpoint.
IDE shows "line too long (.. > 79)" but Ruff passes
Some editor integrations (or their default settings) may enforce a 79 character line length even if the repository uses a different limit.
If uv run ruff check passes but the editor still flags lines:
- Prefer the repo result as the source of truth.
- Adjust your editor/extension settings (Python/Ruff/Flake8) to match the project configuration.