AI Soul personalities and skills from The Undesirables NFT collection. 4,444 autonomous agents with unique personalities, trading strategies, and 35+ built-in tools. Powered by local Ollama inference. Exposes TCG Oracle tools (22 tools for trading card search, grading, pricing, forecasting) and Agent Kit tools (memory graph, media generation, voice, code execution, security audits).
This server exposes 38 tools across two entry points (oracle_server.py with 22 TCG-focused tools, and boot_server.py with 16 media/agent-kit tools). The evaluated tools span image generation, video production, memory management, and TCG market analysis. Critical issues: (1) Most tool descriptions are present but generic and lack actionable context for LLM selection. (2) Input schemas are declared but parameter descriptions are often minimal or absent, many parameters lack depth guidance on valid ranges, enums, or dependencies. (3) Output schemas are not documented, forcing LLMs to infer response structures. (4) Error handling is minimal; no recovery guidance or classification. (5) Security concerns: file-path parameters (image_path, video_path, workspace_path) accept untrusted user input without visible sanitization; no path traversal defense shown. (6) Tools like produce_video and generate_3d_object have complex multi-step semantics but no documented output format or error scenarios. (7) Naming is acceptable (verb_noun pattern mostly followed) but some tools conflate concerns (e.g., produce_video combines script→speech→video in one call). The Dockerfile and requirements.txt show maturity (pinned versions, security audit notes), but the tool definitions themselves lag behind production standards.
Analyze audio to detect and extract beat/tempo information.
Create a promotional banner with a procedural mesh gradient backsplash and layered extracted character. Automatically scales to Scatter.art, OpenSea, or Twitter dimensions.
Create a relationship edge between two memory nodes.
Detect emotion from text, audio, or facial expressions in images.
Generate a 3D model from a text description using TripoSR or similar model.
Generate a meme image with text overlays using templates or procedural generation.
Generate instrumental music based on mood, BPM, and style parameters.
Output schemas not documented. Tools like produce_video, generate_3d_object, generate_meme, soul_rap, and generate_music lack documented return types. LLMs cannot plan downstream operations or extract fields without inferring the response structure, leading to parsing errors.
File-path parameters (image_path, video_path, audio_path, workspace_path, file_path) accept untrusted user input with no visible path traversal defense. Tools like remove_background, scan_media_file, produce_video, and viral_clip_extractor are vulnerable to traversal attacks (../../../etc/passwd). No validation shown in execute_tool.py ALLOWED_TOOLS whitelist.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
Get a subgraph of connected memories around a central node.
Retrieve relevant context from the agent's indexed knowledge for a given query.
Retrieve a specific skill by name from the agent's skill library.
Get the voice preset configuration for this agent based on personality traits.
Grade a trading card image using AI vision model. Returns numeric grade (1-10) and condition assessment.
Convert a 2D image to a 3D model.
Index the agent's workspace files for RAG (retrieval-augmented generation).
Invoke the council of Undesirables for a group decision or debate on a topic.
List all available skills for this agent.
Analyze market depth data from eBay listings and synthesize price history.
The day's market report: biggest gainers and losers by % change, volume leaders, and per-game breakdown across 25 supported card games. SUSPENDED 2026-09-12: the USD price panel froze on 2026-09-07. Returns 200 {status: 'suspended'} with reason and resume condition. PAID: $0.025 USDC per call (x402).
Load a saved memory graph from disk.
Persist the memory graph to disk.
Run Monte Carlo simulation on price data to forecast future prices and volatility.
Produce a video from text, images, and audio using ffmpeg and speech synthesis.
Query the memory graph and return connected memories.
Query a local Ollama instance for language model completions.
Remove background from image using AI segmentation. Returns a PNG with transparency.
Run security analysis on code or files using semgrep and other tools.
Scan a media file (image/video/audio) for metadata, EXIF, and embedded content.
Search eBay for current listings of a TCG card and return market depth data.
Search the agent's memory using full-text or semantic search.
Search 456K+ TCG products across 25+ card games. NOTE: USD market prices frozen at 2026-09-07; responses carry usd_panel {frozen, as_of}. Japanese-print panel (24 games, ~364K cards) refreshes daily.
Introspect the agent's current state, predictions, and performance.
Transcribe audio to text using speech-to-text model.
Generate rap lyrics and optional instrumental matching the agent's personality and a given topic.
Generate speech from text using the agent's voice personality settings.
Add or update a memory node in the agent's memory graph.
Synchronize video cuts and transitions to beat markers in an audio track.
Extract the most engaging or viral moments from a longer video.
Perform a web search and return summarized results.
Parameter descriptions lack detail on constraints, enums, and dependencies. 'theme' in create_banner lists options ('cyberpunk', 'vaporwave', etc.) but should be declared as an enum type. 'num_voices' in invoke_council has a default but no min/max bounds. 'search_type' in search_soul_memory mentions 'text' or 'semantic' but is not an enum. Without formal constraints, LLMs may hallucinate invalid values.
No error handling or recovery guidance. Tools provide no specification of error codes, retryable failures, or actionable next steps. For example, if remove_background fails on an unsupported image format, or produce_video times out, the LLM has no guidance on whether to retry, ask the user, or escalate. No error classification present.
Minimal or generic descriptions for 20+ tools. Tools like get_skill ('Retrieve a specific skill by name from the agent's skill library'), soul_listen ('Transcribe audio to text using speech-to-text model'), and self_reflect ('Introspect the agent's current state, predictions, and performance') have under-80-character descriptions that lack WHEN to use the tool, prerequisites, or dependencies. Baseline for A+ tools is 50 - 200 chars with actionable context.
Tools with complex multi-step semantics lack decomposition. produce_video combines text→speech synthesis→video assembly; soul_rap generates lyrics AND optionally produces instrumental music. These should be split into separate tools (text_to_speech, create_video; generate_rap_lyrics, generate_instrumental) so agents can compose them independently and handle partial failures.
No pagination, limits, or result-size documentation. web_search defaults to 5 results but does not explain max or min bounds. search_ebay_market defaults to 50 listings but gives no guidance on when to paginate or what happens with thousands of listings. No next_cursor or total_count fields documented. Large result sets risk exhausting LLM context.
Stateful operations (memory_save, memory_recall, upsert_memory_node, create_memory_relation, index_soul_workspace) lack idempotence documentation. If an agent retries memory_save due to a transient failure, does it overwrite or append? If upsert_memory_node is called twice with the same node_id, is it idempotent? No guarantee stated, risking duplicate side effects on agent retries.