尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Deepcopy is a market research and trading automation project built with Google ADK.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Deepcopy is a market research and trading automation project built with Google ADK. It combines daily market summaries, stock analyses available through a public Model Context Protocol (MCP) server, and an agentic trading workflow connected to Interactive Brokers (IBKR).
This repository contains the Market Scanner ADK source, database migrations, Terraform infrastructure, public MCP reference, and example outputs. The consultation API serves persisted reports through a separate read-only backend service.
For development and validation, see the contribution guide. For the news tools and global macro report, see macro research. For ADK inference configuration, see LiteLLM gateway integration.
Products and status · Quick start · Architecture · MCP reference
| Product | What it does | Access and status |
|---|---|---|
| Market Scanner | Publishes a daily summary of major market indices and related news. | Public website; no account required. |
| MCP Momentum | Gives MCP clients access to stock analyses, including potential entry points and stop-loss levels. | Public MCP endpoint. |
| Deepcopy agentic workflow | Buys and sells shares on IBKR according to a risk profile; intended for banks and wealth management advisers. | Private preview |
See the AMF warning about the risks of using AI to manage a portfolio.
Open Market Scanner to read the daily analysis. No account is required.
The migrated backend uses FastMCP 4.1.3 with stateless HTTP. See the
backend contract and checks.
The Cloud Run URL below serves all seven tools through Momentum API and Market
Scanner API, including durable pending suggestions. The MCP has no database
access. The old mcp.deepcopy.fr domain has not been migrated.
Add https://momentum-public-mcp-gdezc6bzrq-ew.a.run.app to your preferred MCP client. The server supports protocol revision 2026-07-28.
Ask for recent stock analyses, for example: “List the latest analyses available for AAPL.”
Use an analysis ID returned by list_analyses to request the full report with get_analysis.
To call list_analyses directly from a terminal:
curl https://momentum-public-mcp-gdezc6bzrq-ew.a.run.app \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: tools/call' \
-H 'Mcp-Name: list_analyses' \
--data-raw '{
"jsonrpc": "2.0",
"id": "list-analyses-1",
"method": "tools/call",
"params": {
"name": "list_analyses",
"arguments": {"limit": 1},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {"name": "readme-example", "version": "1.0.0"},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}'
Check result.isError before using a tool response. If it is true, read the error message in result.content. A response such as Momentum public API is unavailable. means analysis data is unavailable through the public API, even if server discovery succeeds.
curl https://momentum-public-mcp-gdezc6bzrq-ew.a.run.app \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: server/discover' \
--data-raw '{
"jsonrpc": "2.0",
"id": "discover-1",
"method": "server/discover",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {"name": "mon-client", "version": "1.0.0"},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}'
[Setup instructions will be added once the workflow's status and access conditions are confirmed.]
The editable project vision remains in the Excalidraw architecture. The diagrams below describe the architecture implemented in this repository and its Terraform configuration. See the architecture notes for source references, system boundaries and regeneration instructions. They show a code snapshot, not a live deployment.
The public MCP server is stateless and uses protocol revision 2026-07-28. Each request includes the protocol version and client capabilities in params._meta, as shown in the quick start.
This reference follows the schemas advertised by tools/list. Response tables highlight selected fields. The list tools (list_analyses, latest_analyses, and get_recommendations) return their arrays in result.structuredContent.result; each item includes an id that can be passed to get_analysis.
Types use Python notation. None means no value is set; — means there is no default value.
The rating filters accept multiple values separated by commas:
Buy, Overweight, Hold, Underweight, Sell.
list_analysesReturns a paginated list of analyses, optionally filtered by ticker. Summaries include ratings, prices, RSI, trends, and P/E ratios.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
ticker | str | None | No | None | Filter by symbol, e.g. AAPL. |
limit | int | No | 50 | Results per page. 1–200. |
offset | int | No | 0 | Pagination offset. |
Response
| Data | Returned fields |
|---|---|
| Identifier | id, analysis_date |
| Summary | ticker, rating, executive_summary |
| Price levels | price_target, entry_price, stop_loss |
| RSI | rsi, rsi_signal |
| Trend | trend_direction, key_support, key_resistance |
| Fundamentals | pe_ratio, peg_ratio, beta |
latest_analysesReturns the latest analysis for each ticker, with an optional portfolio rating filter.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
ticker | str | None | No | None | Limit results to one symbol. |
rating | str | None | No | None | Filter by one or more ratings. |
Response
| Data | Returned fields |
|---|---|
| Summary | ticker, rating, executive_summary |
| Decision | price_target, trader_action |
| Technical | rsi, trend_direction |
get_analysisReturns the full analysis: technical indicators, fundamentals, sentiment, news, bull/bear debates, and the portfolio decision.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
analysis_id | str (UUID) | Yes | — | Analysis identifier. |
Response
| Data | Returned fields |
|---|---|
| Technical | technical_indicators |
| Fundamentals | fundamentals |
| News | sentiment, news |
| Research | research_plan, debate_arguments |
| Decision | trader_proposal, portfolio_decision |
| Execution | run_stats |
get_recommendationsReturns active recommendations filtered by rating. Useful for “what should I buy?” queries.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
rating | str | No | "Buy,Overweight" | Target ratings, separated by commas. |
limit | int | No | 10 | Number of results. 1–100. |
Response
| Data | Returned fields |
|---|---|
| Recommendation | ticker, rating |
| Price levels | price_target, entry_price, stop_loss |
| Risk management | position_size, risk_reward_ratio |
latest_market_scanReturns the latest daily market regime and normalized asset signals.
Parameters: None. Use an empty arguments object: {}.
Response
| Data | Returned fields |
|---|---|
| Identifier and dates | id, scan_date, created_at |
| Market regime | report.regime, report.summary |
| Market observations | report.assets, report.themes, report.sources |
| Full report | report preserves the v3 reader schema, including arbitration and data quality. |
suggest_tickerSubmits a ticker for administrator review without starting an analysis. Pass the returned id to get_suggestion_status to follow the moderation decision.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
symbol | str | Yes | — | Stock symbol, e.g. ASML. |
reason | str | No | "" | Why this ticker should be analyzed. Max. 500 characters. |
Response
| Data | Returned fields |
|---|---|
| Suggestion | id, symbol, reason, source |
| Moderation | status, review_reason |
| Dates | created_at, reviewed_at |
get_suggestion_statusReturns the moderation decision for a suggestion.
Parameters
| Parameter | Type | Required | Default | Description and limits |
|---|---|---|---|---|
suggestion_id | str (UUID) | Yes | — | The id returned by suggest_ticker. |
Response
| Data | Returned fields |
|---|---|
| Suggestion | id, symbol |
| Moderation | status, review_reason |
| Dates | created_at, reviewed_at |
Replace {{publicMcpAnalysisId}} with an analysis ID returned by list_analyses. Send this body to https://momentum-public-mcp-gdezc6bzrq-ew.a.run.app with the same content type, accept, and protocol-version headers as the quick start, plus Mcp-Method: tools/call and Mcp-Name: get_analysis.
{
"jsonrpc": "2.0",
"id": "get-analysis-1",
"method": "tools/call",
"params": {
"name": "get_analysis",
"arguments": {
"analysis_id": "{{publicMcpAnalysisId}}"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "readme-example",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
The example below shows selected fields from an AVGO analysis dated June 11, 2026. A complete response is also available.
{
"jsonrpc": "2.0",
"id": "get-analysis-1",
"result": {
"isError": false,
"resultType": "complete",
"structuredContent": {
"id": "e7d41cc8-19bf-480a-a558-318237b0a0d6",
"ticker": "AVGO",
"analysis_date": "2026-06-11",
"created_at": "2026-06-11T14:25:04.144850Z",
"llm_provider": "google",
"deep_think_llm": "gemini-3.1-pro-preview",
"quick_think_llm": "gemini-3-flash-preview",
"next_analysis_date": "2026-06-18",
"next_analysis_desc": "High volatility and the recent technical breakdown necessitate monitoring the stock's approach to the critical SMA 200 support level at $356.",
"technical_indicators": {
"close_price": 372.1,
"close_signal": "Bearish",
"close_comment": "The stock is undergoing a major correction after reaching historical highs.",
"sma_50": 403.55,
"sma_50_signal": "Bearish",
"sma_50_comment": "The stock has fallen below its 50-day moving average, signaling a medium-term trend reversal.",
"sma_200": 356.38,
"sma_200_signal": "Support",
"sma_200_comment": "The long-term trend remains technically bullish as long as the price stays above this critical support level.",
"ema_10": null,
"ema_10_signal": null,
"ema_10_comment": null,
"rsi": 37.82,
"rsi_signal": "Neutral",
"rsi_comment": "RSI is approaching oversold territory but indicates there is still room for further downside before a rebound.",
"macd": -1.91,
"macd_signal": "Bearish",
"macd_comment": "The MACD has crossed below the signal line into negative territory, indicating accelerating downward momentum.",
"macd_signal_val": null,
"macd_histogram": null,
"boll_upper": 479.06,
"boll_upper_signal": "Resistance",
"boll_upper_comment": "This level marks the volatility peak reached during the record highs in early June.",
"boll_lower": 367.29,
"boll_lower_signal": "Support",
"boll_lower_comment": "The lower Bollinger Band serves as a potential zone for a technical rebound during this liquidation phase.",
"atr": 23.15,
"atr_signal": "High Volatility",
"atr_comment": "Extreme market instability suggests that traders should utilize wider stop-loss orders to manage risk.",
"vwma": 424.64,
"vwma_signal": "Bearish",
"vwma_comment": "The significant gap between the price and the VWMA confirms heavy selling pressure backed by volume.",
"mfi": null,
"mfi_signal": null,
"mfi_comment": null,
"trend_direction": "Downtrend",
"momentum_state": "Accelerating",
"volatility_regime": "Extreme",
"key_support": 356.38,
"key_resistance": 403.55,
"actionable_recommendation": "Hold",
"summary_short": "Broadcom (AVGO) is experiencing a sharp correction, testing critical support levels between $356 and $367. High volatility and bearish momentum suggest caution as the price sits below its 50-day SMA."
},
"fundamentals": {
"market_cap": 1791.0,
"pe_ratio": 62.44,
"forward_pe": 19.46,
"peg_ratio": 0.72,
"eps_ttm": null,
"forward_eps": 19.35,
"revenue": 75.46,
"net_income": 29.32,
"profit_margin": 38.85,
"operating_margin": 48.99,
"roe": 37.28,
"roa": null,
"debt_to_equity": 0.74,
"current_ratio": 2.24,
"free_cash_flow": 27.21,
"total_cash": 19.63,
"capex": null,
"dividend_yield": 0.7,
"beta": null,
"financial_health": "Strong",
"growth_outlook": "Very Strong",
"valuation_assessment": "Undervalued",
"summary_short": "Broadcom exhibits exceptional growth with a 48% YoY revenue increase and elite operating margins near 49%. Despite its mega-cap status, a PEG ratio of 0.72 suggests the stock is currently undervalued relative to its AI-driven growth trajectory."
},
"run_stats": {
"agents_total": 12,
"agents_completed": 12,
"llm_calls": 29,
"tool_calls": 0,
"tokens_in": 140163,
"tokens_out": 51873,
"reports_total": 7,
"reports_completed": 7,
"duration_seconds": 336.56
}
},
"_meta": {
"io.modelcontextprotocol/serverInfo": {
"name": "Momentum Public",
"version": "0.1.0"
}
}
}
}
docs/guides/
for task-oriented walkthroughs of agents, tools, events, plugins, and
workflows.We welcome contributions from the community! Whether it's bug reports, feature requests, documentation improvements, or code contributions, please see our:
This project is licensed under the Apache 2.0 License — see the LICENCE file for details.
Happy trading !