1# Upstream tool name → MAF source binding 2 3The vendored prompts reference Claude-side tools. MAF agents have their own 4source-binding names. This table records the translation so you can re-apply 5it when re-syncing prompts from upstream. 6 7| Upstream (Anthropic FS) | MAF equivalent | Notes | 8|---|---|---| 9| `mcp__factset__*` | `eodhd` (preferred) + `trtools2_api` + `trtools2_news` | EODHD MCP covers ~80% of FactSet's fundamentals/news; trtools2 covers live bars | 10| `mcp__capiq__*` | `eodhd` + `trtools2_api` | EODHD's `get_fundamentals` + `get_eod_data` substitute for CapIQ snapshot | 11| `mcp__daloopa__*` | `fomo2_request` + `eodhd` (earnings_calendar) | Deep earnings extracts via fomo2; calendar via EODHD | 12| `mcp__morningstar__*` | `yahoo_finance` + `fred_api` (macro context) + `eodhd_fundamentals` | EODHD covers fund-level metrics MS exposes | 13| `mcp__sp_global__*` | `trtools2_api` + `eodhd_fundamentals` + `web_search` | Tear sheets: stitch from trtools2 + EODHD + web | 14| `mcp__lseg__*` | `trtools2_api` + `coingecko` | Rates/FX/crypto | 15| `mcp__pitchbook__*` | `web_search` + `sec_filings` | Private-markets: free-tier substitute | 16| `mcp__aiera__*` | `trtools2_news` (filtered) + `eodhd_news` | Earnings transcripts: stitch from both | 17| `mcp__mtnewswires__*` | `trtools2_news` + `eodhd_news` | Wire news from both streams | 18| **anything else** | `mcp_remote` (generic) | Bind any MCP server URL + tool name; see `mcp_remote.py` | 19| `Read` / `Write` / `Edit` | (n/a) | File-system tools — MAF agents don't write files; they emit AgentSignals | 20 21## EODHD MCP — bind once, get 77 tools 22 23Set `EODHD_API_KEY` in `.env`, then bind the `eodhd` adapter with the 24tool name you want: 25 26```yaml 27sources: 28 - name: fund_metrics 29 adapter: eodhd 30 config: { tool: get_fundamentals } 31 - name: earnings_dates 32 adapter: eodhd 33 config: { tool: get_earnings_calendar } 34``` 35 36At runtime the agent calls these like any other source. The MCP shim 37opens a fresh session per call, sends one tool call, closes the 38session — fine for the once-per-arena-run pattern, not for high-frequency 39polling. 40 41## Generic MCP — `mcp_remote` 42 43For non-EODHD MCP servers (FactSet, CapIQ, your own): 44 45```yaml 46sources: 47 - name: factset_company 48 adapter: mcp_remote 49 config: 50 url: "${FACTSET_MCP_URL}" # secrets read from env 51 tool: get_company_overview 52 headers: 53 Authorization: "Bearer ${FACTSET_TOKEN}" 54``` 55 56## Workflow translation 57 58Upstream agents `Invoke` skill names directly (e.g. `Invoke earnings-analysis`). 59MAF skills aren't invoked; they're loaded as the agent's `system_prompt_file`. 60The translation: take the upstream `Invoke X` step, find the corresponding 61MAF source binding, and rewrite the step as "call your `<source>` tool". 62 63## Output translation 64 65Upstream agents produce `.docx` / `.pptx` files via the Office MCP. MAF 66agents emit a single structured [`AgentSignal`](../../core/state.py) JSON. 67The vendored prompts have an appended header that overrides the file-writing 68instructions and asks for the AgentSignal shape instead.