Spaces:
Sleeping
Sleeping
Upload 3 files
Browse files- edgar_client.py +26 -9
- mcp_server_sse.py +3 -3
edgar_client.py
CHANGED
|
@@ -689,9 +689,10 @@ class EdgarDataClient:
|
|
| 689 |
"meta": {
|
| 690 |
"year": year,
|
| 691 |
"quarter": quarter,
|
| 692 |
-
"is_20f_filer": False # will set below
|
|
|
|
| 693 |
},
|
| 694 |
-
"sources": {}
|
| 695 |
}
|
| 696 |
|
| 697 |
# Detect if company uses 20-F (foreign filer)
|
|
@@ -877,14 +878,30 @@ class EdgarDataClient:
|
|
| 877 |
result["source_url"] = url
|
| 878 |
result["source_form"] = form_type
|
| 879 |
result["data_source"] = data_source
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 880 |
|
| 881 |
-
#
|
| 882 |
-
result["
|
| 883 |
-
|
| 884 |
-
"form"
|
| 885 |
-
"data_source":
|
| 886 |
-
"
|
| 887 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 888 |
|
| 889 |
# Add detailed information (kept for compatibility)
|
| 890 |
result[f"{metric_key}_details"] = {
|
|
|
|
| 689 |
"meta": {
|
| 690 |
"year": year,
|
| 691 |
"quarter": quarter,
|
| 692 |
+
"is_20f_filer": False, # will set below
|
| 693 |
+
"primary_source": {} # Common source info for all metrics in this period
|
| 694 |
},
|
| 695 |
+
"sources": {} # Per-metric source info (only if differs from primary)
|
| 696 |
}
|
| 697 |
|
| 698 |
# Detect if company uses 20-F (foreign filer)
|
|
|
|
| 878 |
result["source_url"] = url
|
| 879 |
result["source_form"] = form_type
|
| 880 |
result["data_source"] = data_source
|
| 881 |
+
|
| 882 |
+
# Set primary source info (common for all metrics in this period)
|
| 883 |
+
result["meta"]["primary_source"] = {
|
| 884 |
+
"url": url,
|
| 885 |
+
"form": form_type,
|
| 886 |
+
"data_source": data_source,
|
| 887 |
+
"filed": matched_entry.get("filed", ""),
|
| 888 |
+
"accn": matched_entry.get("accn", ""),
|
| 889 |
+
"fy": matched_entry.get("fy", 0),
|
| 890 |
+
"fp": matched_entry.get("fp", ""),
|
| 891 |
+
"frame": matched_entry.get("frame", "")
|
| 892 |
+
}
|
| 893 |
|
| 894 |
+
# Only add per-metric source if it differs from primary
|
| 895 |
+
primary_src = result["meta"]["primary_source"]
|
| 896 |
+
if (url != primary_src.get("url") or
|
| 897 |
+
form_type != primary_src.get("form") or
|
| 898 |
+
data_source != primary_src.get("data_source")):
|
| 899 |
+
result["sources"][metric_key] = {
|
| 900 |
+
"url": url,
|
| 901 |
+
"form": form_type,
|
| 902 |
+
"data_source": data_source,
|
| 903 |
+
"filed": matched_entry.get("filed", "")
|
| 904 |
+
}
|
| 905 |
|
| 906 |
# Add detailed information (kept for compatibility)
|
| 907 |
result[f"{metric_key}_details"] = {
|
mcp_server_sse.py
CHANGED
|
@@ -27,7 +27,7 @@ from contextlib import contextmanager
|
|
| 27 |
app = FastAPI(
|
| 28 |
title="SEC Financial Report MCP Server API",
|
| 29 |
description="Model Context Protocol Server for SEC EDGAR Financial Data",
|
| 30 |
-
version="2.3.
|
| 31 |
)
|
| 32 |
|
| 33 |
# Server startup time for monitoring
|
|
@@ -415,7 +415,7 @@ async def handle_mcp_message(request: MCPRequest):
|
|
| 415 |
},
|
| 416 |
"serverInfo": {
|
| 417 |
"name": "sec-financial-data",
|
| 418 |
-
"version": "2.3.
|
| 419 |
}
|
| 420 |
}
|
| 421 |
).dict()
|
|
@@ -547,7 +547,7 @@ async def health_check():
|
|
| 547 |
return {
|
| 548 |
"status": "healthy",
|
| 549 |
"server": "sec-financial-data",
|
| 550 |
-
"version": "2.3.
|
| 551 |
"protocol": "MCP",
|
| 552 |
"transport": "SSE",
|
| 553 |
"tools_count": len(MCP_TOOLS),
|
|
|
|
| 27 |
app = FastAPI(
|
| 28 |
title="SEC Financial Report MCP Server API",
|
| 29 |
description="Model Context Protocol Server for SEC EDGAR Financial Data",
|
| 30 |
+
version="2.3.6"
|
| 31 |
)
|
| 32 |
|
| 33 |
# Server startup time for monitoring
|
|
|
|
| 415 |
},
|
| 416 |
"serverInfo": {
|
| 417 |
"name": "sec-financial-data",
|
| 418 |
+
"version": "2.3.6"
|
| 419 |
}
|
| 420 |
}
|
| 421 |
).dict()
|
|
|
|
| 547 |
return {
|
| 548 |
"status": "healthy",
|
| 549 |
"server": "sec-financial-data",
|
| 550 |
+
"version": "2.3.6",
|
| 551 |
"protocol": "MCP",
|
| 552 |
"transport": "SSE",
|
| 553 |
"tools_count": len(MCP_TOOLS),
|