Spaces:
Sleeping
Sleeping
Upload mcp_server_sse.py
Browse files- mcp_server_sse.py +140 -3
mcp_server_sse.py
CHANGED
|
@@ -24,7 +24,7 @@ from contextlib import contextmanager
|
|
| 24 |
app = FastAPI(
|
| 25 |
title="SEC Financial Report MCP Server",
|
| 26 |
description="Model Context Protocol Server for SEC EDGAR Financial Data",
|
| 27 |
-
version="2.2.
|
| 28 |
)
|
| 29 |
|
| 30 |
# Server startup time for monitoring
|
|
@@ -403,7 +403,7 @@ async def handle_mcp_message(request: MCPRequest):
|
|
| 403 |
},
|
| 404 |
"serverInfo": {
|
| 405 |
"name": "sec-financial-data",
|
| 406 |
-
"version": "2.2.
|
| 407 |
}
|
| 408 |
}
|
| 409 |
).dict()
|
|
@@ -658,6 +658,42 @@ async def root():
|
|
| 658 |
color: #667eea;
|
| 659 |
font-weight: 500;
|
| 660 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 661 |
.test-btn {
|
| 662 |
background: linear-gradient(135deg, #667eea, #764ba2);
|
| 663 |
color: white;
|
|
@@ -772,6 +808,20 @@ async def root():
|
|
| 772 |
<div class="example-item"><span class="example-label">Input:</span> "Tesla"</div>
|
| 773 |
</div>
|
| 774 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 775 |
<div class="param-group">
|
| 776 |
<label>Company Name *</label>
|
| 777 |
<input type="text" id="tool1-company_name" placeholder="e.g., Microsoft, Apple, Tesla">
|
|
@@ -802,6 +852,20 @@ async def root():
|
|
| 802 |
<div class="example-item"><span class="example-label">By Name:</span> "Microsoft Corporation"</div>
|
| 803 |
</div>
|
| 804 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 805 |
<div class="param-group">
|
| 806 |
<label>Company Name / Ticker / CIK *</label>
|
| 807 |
<input type="text" id="tool2-company_input" placeholder="e.g., MSFT, 0000789019, Microsoft">
|
|
@@ -832,6 +896,20 @@ async def root():
|
|
| 832 |
<div class="example-item"><span class="example-label">Tesla:</span> "0001318605"</div>
|
| 833 |
</div>
|
| 834 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 835 |
<div class="param-group">
|
| 836 |
<label>CIK Code *</label>
|
| 837 |
<input type="text" id="tool3-cik" placeholder="e.g., 0000789019">
|
|
@@ -862,6 +940,21 @@ async def root():
|
|
| 862 |
<div class="example-item"><span class="example-label">Or:</span> Leave empty to get all filing types</div>
|
| 863 |
</div>
|
| 864 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 865 |
<div class="param-group">
|
| 866 |
<label>CIK Code *</label>
|
| 867 |
<input type="text" id="tool4-cik" placeholder="e.g., 0000789019">
|
|
@@ -901,6 +994,20 @@ async def root():
|
|
| 901 |
<div class="example-item"><span class="example-label">NVIDIA:</span> "0001045810"</div>
|
| 902 |
</div>
|
| 903 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 904 |
<div class="param-group">
|
| 905 |
<label>CIK Code *</label>
|
| 906 |
<input type="text" id="tool5-cik" placeholder="e.g., 0000789019">
|
|
@@ -930,6 +1037,21 @@ async def root():
|
|
| 930 |
<div class="example-item"><span class="example-label">Format:</span> YYYY for annual, YYYYQX for quarterly</div>
|
| 931 |
</div>
|
| 932 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 933 |
<div class="param-group">
|
| 934 |
<label>CIK Code *</label>
|
| 935 |
<input type="text" id="tool6-cik" placeholder="e.g., 0000789019">
|
|
@@ -964,6 +1086,21 @@ async def root():
|
|
| 964 |
<div class="example-item"><span class="example-label">Note:</span> Returns annual + quarterly data (if available)</div>
|
| 965 |
</div>
|
| 966 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 967 |
<div class="param-group">
|
| 968 |
<label>CIK Code *</label>
|
| 969 |
<input type="text" id="tool7-cik" placeholder="e.g., 0000789019">
|
|
@@ -1143,7 +1280,7 @@ async def health_check():
|
|
| 1143 |
return {
|
| 1144 |
"status": "healthy",
|
| 1145 |
"server": "sec-financial-data",
|
| 1146 |
-
"version": "2.2.
|
| 1147 |
"protocol": "MCP",
|
| 1148 |
"transport": "SSE",
|
| 1149 |
"tools_count": len(MCP_TOOLS),
|
|
|
|
| 24 |
app = FastAPI(
|
| 25 |
title="SEC Financial Report MCP Server",
|
| 26 |
description="Model Context Protocol Server for SEC EDGAR Financial Data",
|
| 27 |
+
version="2.2.3"
|
| 28 |
)
|
| 29 |
|
| 30 |
# Server startup time for monitoring
|
|
|
|
| 403 |
},
|
| 404 |
"serverInfo": {
|
| 405 |
"name": "sec-financial-data",
|
| 406 |
+
"version": "2.2.3"
|
| 407 |
}
|
| 408 |
}
|
| 409 |
).dict()
|
|
|
|
| 658 |
color: #667eea;
|
| 659 |
font-weight: 500;
|
| 660 |
}
|
| 661 |
+
.api-example-box {
|
| 662 |
+
background: #1e1e1e;
|
| 663 |
+
border-radius: 4px;
|
| 664 |
+
padding: 12px;
|
| 665 |
+
margin: 10px 0;
|
| 666 |
+
font-family: 'Monaco', 'Courier New', monospace;
|
| 667 |
+
font-size: 11px;
|
| 668 |
+
overflow-x: auto;
|
| 669 |
+
}
|
| 670 |
+
.api-example-box .api-title {
|
| 671 |
+
color: #9cdcfe;
|
| 672 |
+
font-weight: 600;
|
| 673 |
+
margin-bottom: 8px;
|
| 674 |
+
display: flex;
|
| 675 |
+
align-items: center;
|
| 676 |
+
gap: 5px;
|
| 677 |
+
}
|
| 678 |
+
.api-example-box .api-title::before {
|
| 679 |
+
content: "📡";
|
| 680 |
+
font-size: 14px;
|
| 681 |
+
}
|
| 682 |
+
.api-example-box pre {
|
| 683 |
+
margin: 0;
|
| 684 |
+
color: #d4d4d4;
|
| 685 |
+
white-space: pre-wrap;
|
| 686 |
+
word-break: break-word;
|
| 687 |
+
}
|
| 688 |
+
.api-example-box .json-key {
|
| 689 |
+
color: #9cdcfe;
|
| 690 |
+
}
|
| 691 |
+
.api-example-box .json-string {
|
| 692 |
+
color: #ce9178;
|
| 693 |
+
}
|
| 694 |
+
.api-example-box .json-number {
|
| 695 |
+
color: #b5cea8;
|
| 696 |
+
}
|
| 697 |
.test-btn {
|
| 698 |
background: linear-gradient(135deg, #667eea, #764ba2);
|
| 699 |
color: white;
|
|
|
|
| 808 |
<div class="example-item"><span class="example-label">Input:</span> "Tesla"</div>
|
| 809 |
</div>
|
| 810 |
</div>
|
| 811 |
+
<div class="api-example-box">
|
| 812 |
+
<div class="api-title">API Request Example</div>
|
| 813 |
+
<pre>{
|
| 814 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 815 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 816 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 817 |
+
<span class="json-key">"params"</span>: {
|
| 818 |
+
<span class="json-key">"name"</span>: <span class="json-string">"search_company"</span>,
|
| 819 |
+
<span class="json-key">"arguments"</span>: {
|
| 820 |
+
<span class="json-key">"company_name"</span>: <span class="json-string">"Microsoft"</span>
|
| 821 |
+
}
|
| 822 |
+
}
|
| 823 |
+
}</pre>
|
| 824 |
+
</div>
|
| 825 |
<div class="param-group">
|
| 826 |
<label>Company Name *</label>
|
| 827 |
<input type="text" id="tool1-company_name" placeholder="e.g., Microsoft, Apple, Tesla">
|
|
|
|
| 852 |
<div class="example-item"><span class="example-label">By Name:</span> "Microsoft Corporation"</div>
|
| 853 |
</div>
|
| 854 |
</div>
|
| 855 |
+
<div class="api-example-box">
|
| 856 |
+
<div class="api-title">API Request Example</div>
|
| 857 |
+
<pre>{
|
| 858 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 859 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 860 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 861 |
+
<span class="json-key">"params"</span>: {
|
| 862 |
+
<span class="json-key">"name"</span>: <span class="json-string">"advanced_search_company"</span>,
|
| 863 |
+
<span class="json-key">"arguments"</span>: {
|
| 864 |
+
<span class="json-key">"company_input"</span>: <span class="json-string">"MSFT"</span>
|
| 865 |
+
}
|
| 866 |
+
}
|
| 867 |
+
}</pre>
|
| 868 |
+
</div>
|
| 869 |
<div class="param-group">
|
| 870 |
<label>Company Name / Ticker / CIK *</label>
|
| 871 |
<input type="text" id="tool2-company_input" placeholder="e.g., MSFT, 0000789019, Microsoft">
|
|
|
|
| 896 |
<div class="example-item"><span class="example-label">Tesla:</span> "0001318605"</div>
|
| 897 |
</div>
|
| 898 |
</div>
|
| 899 |
+
<div class="api-example-box">
|
| 900 |
+
<div class="api-title">API Request Example</div>
|
| 901 |
+
<pre>{
|
| 902 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 903 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 904 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 905 |
+
<span class="json-key">"params"</span>: {
|
| 906 |
+
<span class="json-key">"name"</span>: <span class="json-string">"get_company_info"</span>,
|
| 907 |
+
<span class="json-key">"arguments"</span>: {
|
| 908 |
+
<span class="json-key">"cik"</span>: <span class="json-string">"0000789019"</span>
|
| 909 |
+
}
|
| 910 |
+
}
|
| 911 |
+
}</pre>
|
| 912 |
+
</div>
|
| 913 |
<div class="param-group">
|
| 914 |
<label>CIK Code *</label>
|
| 915 |
<input type="text" id="tool3-cik" placeholder="e.g., 0000789019">
|
|
|
|
| 940 |
<div class="example-item"><span class="example-label">Or:</span> Leave empty to get all filing types</div>
|
| 941 |
</div>
|
| 942 |
</div>
|
| 943 |
+
<div class="api-example-box">
|
| 944 |
+
<div class="api-title">API Request Example</div>
|
| 945 |
+
<pre>{
|
| 946 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 947 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 948 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 949 |
+
<span class="json-key">"params"</span>: {
|
| 950 |
+
<span class="json-key">"name"</span>: <span class="json-string">"get_company_filings"</span>,
|
| 951 |
+
<span class="json-key">"arguments"</span>: {
|
| 952 |
+
<span class="json-key">"cik"</span>: <span class="json-string">"0000789019"</span>,
|
| 953 |
+
<span class="json-key">"form_types"</span>: [<span class="json-string">"10-K"</span>, <span class="json-string">"10-Q"</span>]
|
| 954 |
+
}
|
| 955 |
+
}
|
| 956 |
+
}</pre>
|
| 957 |
+
</div>
|
| 958 |
<div class="param-group">
|
| 959 |
<label>CIK Code *</label>
|
| 960 |
<input type="text" id="tool4-cik" placeholder="e.g., 0000789019">
|
|
|
|
| 994 |
<div class="example-item"><span class="example-label">NVIDIA:</span> "0001045810"</div>
|
| 995 |
</div>
|
| 996 |
</div>
|
| 997 |
+
<div class="api-example-box">
|
| 998 |
+
<div class="api-title">API Request Example</div>
|
| 999 |
+
<pre>{
|
| 1000 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 1001 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 1002 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 1003 |
+
<span class="json-key">"params"</span>: {
|
| 1004 |
+
<span class="json-key">"name"</span>: <span class="json-string">"get_latest_financial_data"</span>,
|
| 1005 |
+
<span class="json-key">"arguments"</span>: {
|
| 1006 |
+
<span class="json-key">"cik"</span>: <span class="json-string">"0000789019"</span>
|
| 1007 |
+
}
|
| 1008 |
+
}
|
| 1009 |
+
}</pre>
|
| 1010 |
+
</div>
|
| 1011 |
<div class="param-group">
|
| 1012 |
<label>CIK Code *</label>
|
| 1013 |
<input type="text" id="tool5-cik" placeholder="e.g., 0000789019">
|
|
|
|
| 1037 |
<div class="example-item"><span class="example-label">Format:</span> YYYY for annual, YYYYQX for quarterly</div>
|
| 1038 |
</div>
|
| 1039 |
</div>
|
| 1040 |
+
<div class="api-example-box">
|
| 1041 |
+
<div class="api-title">API Request Example</div>
|
| 1042 |
+
<pre>{
|
| 1043 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 1044 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 1045 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 1046 |
+
<span class="json-key">"params"</span>: {
|
| 1047 |
+
<span class="json-key">"name"</span>: <span class="json-string">"get_financial_data"</span>,
|
| 1048 |
+
<span class="json-key">"arguments"</span>: {
|
| 1049 |
+
<span class="json-key">"cik"</span>: <span class="json-string">"0000789019"</span>,
|
| 1050 |
+
<span class="json-key">"period"</span>: <span class="json-string">"2024"</span>
|
| 1051 |
+
}
|
| 1052 |
+
}
|
| 1053 |
+
}</pre>
|
| 1054 |
+
</div>
|
| 1055 |
<div class="param-group">
|
| 1056 |
<label>CIK Code *</label>
|
| 1057 |
<input type="text" id="tool6-cik" placeholder="e.g., 0000789019">
|
|
|
|
| 1086 |
<div class="example-item"><span class="example-label">Note:</span> Returns annual + quarterly data (if available)</div>
|
| 1087 |
</div>
|
| 1088 |
</div>
|
| 1089 |
+
<div class="api-example-box">
|
| 1090 |
+
<div class="api-title">API Request Example</div>
|
| 1091 |
+
<pre>{
|
| 1092 |
+
<span class="json-key">"jsonrpc"</span>: <span class="json-string">"2.0"</span>,
|
| 1093 |
+
<span class="json-key">"id"</span>: <span class="json-number">1</span>,
|
| 1094 |
+
<span class="json-key">"method"</span>: <span class="json-string">"tools/call"</span>,
|
| 1095 |
+
<span class="json-key">"params"</span>: {
|
| 1096 |
+
<span class="json-key">"name"</span>: <span class="json-string">"extract_financial_metrics"</span>,
|
| 1097 |
+
<span class="json-key">"arguments"</span>: {
|
| 1098 |
+
<span class="json-key">"cik"</span>: <span class="json-string">"0000789019"</span>,
|
| 1099 |
+
<span class="json-key">"years"</span>: <span class="json-number">3</span>
|
| 1100 |
+
}
|
| 1101 |
+
}
|
| 1102 |
+
}</pre>
|
| 1103 |
+
</div>
|
| 1104 |
<div class="param-group">
|
| 1105 |
<label>CIK Code *</label>
|
| 1106 |
<input type="text" id="tool7-cik" placeholder="e.g., 0000789019">
|
|
|
|
| 1280 |
return {
|
| 1281 |
"status": "healthy",
|
| 1282 |
"server": "sec-financial-data",
|
| 1283 |
+
"version": "2.2.3",
|
| 1284 |
"protocol": "MCP",
|
| 1285 |
"transport": "SSE",
|
| 1286 |
"tools_count": len(MCP_TOOLS),
|