mcp-server-saxo-openapi 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_server_saxo_openapi-0.1.1/.gitignore +7 -0
- mcp_server_saxo_openapi-0.1.1/CONTRIBUTING.md +48 -0
- mcp_server_saxo_openapi-0.1.1/LICENSE +21 -0
- mcp_server_saxo_openapi-0.1.1/PKG-INFO +214 -0
- mcp_server_saxo_openapi-0.1.1/README.ja.md +146 -0
- mcp_server_saxo_openapi-0.1.1/README.md +188 -0
- mcp_server_saxo_openapi-0.1.1/SPEC_FRESHNESS.md +26 -0
- mcp_server_saxo_openapi-0.1.1/pyproject.toml +64 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/cashmanagement-beneficiaryinstructions.json +83 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/cashmanagement-cashwithdrawal.json +76 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/cashmanagement-cashwithdrawallimits.json +63 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/cashmanagement-interaccounttransfers.json +48 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/cashmanagement-periodicpayment.json +389 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/partner-cashtransfer.json +227 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/partner-cashtransferlimits.json +63 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/partner-prefunding.json +108 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/atr/securitiestransfers.json +1268 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/elections.json +156 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/events.json +1446 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/eventviews.json +876 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/holdings.json +281 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/proxyvoting.json +347 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ca/standinginstructions.json +401 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/chart/charts.json +1707 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cm/accounts.json +41 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cm/clientrenewals.json +3244 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cm/documents.json +108 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cm/signups.json +633 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cm/users.json +45 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cr/historicalreportdata-accountstatement.json +82 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cr/historicalreportdata-portfoliomanagement.json +157 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cr/historicalreportdata-tradedetails.json +82 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cr/historicalreportdata-tradesexecuted.json +57 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/audit-orderactivities.json +257 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/cashmanagement-interaccounttransfer.json +68 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/cashmanagement-wiretransfers.json +66 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/clientinfo.json +164 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/historicalreportdata-aggregatedamounts.json +149 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/historicalreportdata-bookings.json +257 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/historicalreportdata-closedpositions.json +111 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/historicalreportdata-trades.json +139 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/support-cases.json +565 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/tradingconditions-contractoption.json +122 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/tradingconditions-cost.json +919 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/cs/tradingconditions.json +899 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/dm/disclaimermanagement.json +129 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ens/clientactivities.json +1512 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/hist/accountvalues.json +57 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/hist/historicalpositions.json +800 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/hist/performance.json +1082 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/hist/transactions.json +367 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/hist/unsettledamounts.json +524 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/mkt/instrumentdocument.json +1512 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/advisoryaccounts.json +490 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/externalaccounts.json +785 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/fundinginstruction.json +266 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/interactiveesigning.json +235 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/interactiveidverification.json +185 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/partnerbulkbookings.json +80 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/partnerintegration/updatepricing.json +716 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/accountgroups.json +191 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/accounts.json +1106 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/balances.json +3457 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/clients.json +1418 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/closedpositions.json +612 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/exposure.json +2987 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/netpositions.json +2079 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/orders.json +664 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/positions.json +852 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/port/users.json +1047 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/algostrategies.json +102 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/countries.json +244 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/cultures.json +74 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/currencies.json +91 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/currencypairs.json +86 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/exchanges.json +76 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/instruments.json +3475 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/languages.json +83 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/standarddates.json +69 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/ref/timezones.json +129 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/reg/financialoverview.json +483 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/reg/investmentprofile.json +843 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/reg/knowledgeandexperience.json +131 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/allocationkeys.json +1044 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/infoprices.json +2811 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/messages.json +362 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/optionschain.json +1179 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/orders.json +10001 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/positions.json +1395 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/prices.json +3053 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/trade/trades.json +936 -0
- mcp_server_saxo_openapi-0.1.1/spec/json/vas/pricealerts.json +1933 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/__init__.py +32 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/__main__.py +6 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/cli.py +95 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/commands.py +119 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/__init__.py +1 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/cashmanagement-beneficiaryinstructions.json +83 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/cashmanagement-cashwithdrawal.json +76 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/cashmanagement-cashwithdrawallimits.json +63 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/cashmanagement-interaccounttransfers.json +48 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/cashmanagement-periodicpayment.json +389 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/partner-cashtransfer.json +227 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/partner-cashtransferlimits.json +63 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/partner-prefunding.json +108 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/atr/securitiestransfers.json +1268 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/elections.json +156 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/events.json +1446 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/eventviews.json +876 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/holdings.json +281 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/proxyvoting.json +347 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ca/standinginstructions.json +401 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/chart/charts.json +1707 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cm/accounts.json +41 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cm/clientrenewals.json +3244 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cm/documents.json +108 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cm/signups.json +633 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cm/users.json +45 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cr/historicalreportdata-accountstatement.json +82 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cr/historicalreportdata-portfoliomanagement.json +157 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cr/historicalreportdata-tradedetails.json +82 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cr/historicalreportdata-tradesexecuted.json +57 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/audit-orderactivities.json +257 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/cashmanagement-interaccounttransfer.json +68 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/cashmanagement-wiretransfers.json +66 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/clientinfo.json +164 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/historicalreportdata-aggregatedamounts.json +149 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/historicalreportdata-bookings.json +257 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/historicalreportdata-closedpositions.json +111 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/historicalreportdata-trades.json +139 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/support-cases.json +565 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/tradingconditions-contractoption.json +122 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/tradingconditions-cost.json +919 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/cs/tradingconditions.json +899 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/dm/disclaimermanagement.json +129 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ens/clientactivities.json +1512 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/hist/accountvalues.json +57 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/hist/historicalpositions.json +800 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/hist/performance.json +1082 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/hist/transactions.json +367 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/hist/unsettledamounts.json +524 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/mkt/instrumentdocument.json +1512 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/advisoryaccounts.json +490 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/externalaccounts.json +785 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/fundinginstruction.json +266 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/interactiveesigning.json +235 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/interactiveidverification.json +185 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/partnerbulkbookings.json +80 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/partnerintegration/updatepricing.json +716 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/accountgroups.json +191 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/accounts.json +1106 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/balances.json +3457 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/clients.json +1418 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/closedpositions.json +612 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/exposure.json +2987 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/netpositions.json +2079 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/orders.json +664 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/positions.json +852 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/port/users.json +1047 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/algostrategies.json +102 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/countries.json +244 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/cultures.json +74 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/currencies.json +91 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/currencypairs.json +86 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/exchanges.json +76 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/instruments.json +3475 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/languages.json +83 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/standarddates.json +69 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/ref/timezones.json +129 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/reg/financialoverview.json +483 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/reg/investmentprofile.json +843 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/reg/knowledgeandexperience.json +131 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/allocationkeys.json +1044 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/infoprices.json +2811 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/messages.json +362 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/optionschain.json +1179 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/orders.json +10001 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/positions.json +1395 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/prices.json +3053 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/trade/trades.json +936 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/data/json/vas/pricealerts.json +1933 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/index.py +151 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/mcp_server.py +146 -0
- mcp_server_saxo_openapi-0.1.1/src/saxo_doc_helper/py.typed +0 -0
- mcp_server_saxo_openapi-0.1.1/tests/test_saxo_doc_helper.py +146 -0
- mcp_server_saxo_openapi-0.1.1/tools/saxo_doc_helper.py +22 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in **mcp-server-saxo-openapi**.
|
|
4
|
+
|
|
5
|
+
## What we welcome
|
|
6
|
+
|
|
7
|
+
- Bug reports and reproducible examples for `saxo-doc-helper` / MCP
|
|
8
|
+
- Improvements to CLI/MCP ergonomics (normalization, error messages, tests)
|
|
9
|
+
- Documentation fixes in `README.md` / `README.ja.md`
|
|
10
|
+
|
|
11
|
+
## What is harder to accept
|
|
12
|
+
|
|
13
|
+
- Hand-editing large files under `spec/json/` — specs are generated from the Saxo Developer Portal. Prefer the maintainer regeneration flow.
|
|
14
|
+
|
|
15
|
+
## Updating the spec database
|
|
16
|
+
|
|
17
|
+
If you maintain a full development workspace with the crawler pipeline, see [docs/MAINTAINER.md](docs/MAINTAINER.md).
|
|
18
|
+
|
|
19
|
+
Otherwise, open an issue describing which Saxo endpoint or schema looks stale, with a link to the official Saxo reference page.
|
|
20
|
+
|
|
21
|
+
## Development setup
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone https://github.com/nohikomiso/mcp-server-saxo-openapi.git
|
|
25
|
+
cd mcp-server-saxo-openapi
|
|
26
|
+
uv sync
|
|
27
|
+
uv run python -m unittest discover -s tests -v
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
No third-party runtime dependencies (Python standard library only).
|
|
31
|
+
|
|
32
|
+
Before a release, sync packaged data from the maintainer source of truth:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
rm -rf src/saxo_doc_helper/data/json
|
|
36
|
+
cp -a spec/json src/saxo_doc_helper/data/json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Pull requests
|
|
40
|
+
|
|
41
|
+
1. Fork and create a branch from `main`
|
|
42
|
+
2. Run `uv run python -m unittest discover -s tests -v`
|
|
43
|
+
3. Keep README changes in sync across English and Japanese when both are affected
|
|
44
|
+
4. Open a PR with a short summary and test evidence
|
|
45
|
+
|
|
46
|
+
## License
|
|
47
|
+
|
|
48
|
+
By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 nohikomiso
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mcp-server-saxo-openapi
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: MCP server and CLI for Saxo Bank OpenAPI spec lookup (offline; no trading)
|
|
5
|
+
Project-URL: Homepage, https://github.com/nohikomiso/mcp-server-saxo-openapi
|
|
6
|
+
Project-URL: Repository, https://github.com/nohikomiso/mcp-server-saxo-openapi
|
|
7
|
+
Project-URL: Issues, https://github.com/nohikomiso/mcp-server-saxo-openapi/issues
|
|
8
|
+
Author: nohikomiso
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: cli,mcp,model-context-protocol,openapi,saxo,saxo-bank,saxobank,trading
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
23
|
+
Classifier: Typing :: Typed
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# mcp-server-saxo-openapi
|
|
28
|
+
|
|
29
|
+
**Saxo Bank OpenAPI spec lookup — CLI tool and MCP server**
|
|
30
|
+
|
|
31
|
+
English | [日本語](https://github.com/nohikomiso/mcp-server-saxo-openapi/blob/main/README.ja.md)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+

|
|
36
|
+

|
|
37
|
+

|
|
38
|
+

|
|
39
|
+

|
|
40
|
+
|
|
41
|
+
Look up **Saxo Bank** / **Saxobank** OpenAPI endpoint parameters and JSON samples from your terminal, or attach the same tools to Cursor, Claude Desktop, and other MCP clients — without wrestling the deep official reference tree.
|
|
42
|
+
|
|
43
|
+
Zero third-party dependencies (Python stdlib only). Spec database: ~260 endpoints across 17 service groups, shipped inside the wheel.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Spec snapshot
|
|
48
|
+
|
|
49
|
+
**Spec snapshot: 2026-07-08** (Saxo Release Notes through **2025/05/15**).
|
|
50
|
+
|
|
51
|
+
Structured endpoint specs for agents and developers. Saxo does not publish a single docs semver; we record the crawl date and the newest Release Notes heading present at that time. Details: [SPEC_FRESHNESS.md](SPEC_FRESHNESS.md).
|
|
52
|
+
|
|
53
|
+
Missing endpoint, wrong parameter, or something that looks out of date? Please [open an Issue](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues). Pull requests: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## What this is / is not
|
|
58
|
+
|
|
59
|
+
| This package | Not this package |
|
|
60
|
+
|--------------|------------------|
|
|
61
|
+
| Offline **spec lookup** (CLI + MCP) | Live trading / portfolio API calls |
|
|
62
|
+
| No Saxo credentials required | OAuth, order placement, balances |
|
|
63
|
+
| Token-efficient progressive disclosure | A substitute for a full OpenAPI client |
|
|
64
|
+
|
|
65
|
+
For **live** Saxo OpenAPI access from an MCP client, see community servers such as [`@borgels/mcp-server-saxo`](https://www.npmjs.com/package/@borgels/mcp-server-saxo) (npm, unofficial, separate project).
|
|
66
|
+
|
|
67
|
+
**Unofficial** — not affiliated with or endorsed by Saxo Bank A/S.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Features
|
|
72
|
+
|
|
73
|
+
- **Structured spec database** — nested parameters and request/response samples
|
|
74
|
+
- **CLI** — `search-endpoints`, `get-endpoint`, `get-schema` with depth control and "Did you mean?" suggestions
|
|
75
|
+
- **MCP server** — stdio JSON-RPC; same three tools
|
|
76
|
+
- **Token-efficient** — progressive disclosure (collapsed nested schemas, drill down on demand)
|
|
77
|
+
|
|
78
|
+
**Requirements:** Python 3.10+
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Getting started — recommended (uvx)
|
|
83
|
+
|
|
84
|
+
### Production PyPI
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
uvx mcp-server-saxo-openapi
|
|
88
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper search-endpoints orders
|
|
89
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper --version
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`uvx` resolves the **package** name; use `--from mcp-server-saxo-openapi` to run the `saxo-doc-helper` console script.
|
|
93
|
+
|
|
94
|
+
MCP client config:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"mcpServers": {
|
|
99
|
+
"saxo-openapi": {
|
|
100
|
+
"command": "uvx",
|
|
101
|
+
"args": ["mcp-server-saxo-openapi"]
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### From GitHub
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
uvx --from git+https://github.com/nohikomiso/mcp-server-saxo-openapi.git saxo-doc-helper search-endpoints orders
|
|
111
|
+
uvx --from git+https://github.com/nohikomiso/mcp-server-saxo-openapi.git mcp-server-saxo-openapi
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### TestPyPI (development only)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
uvx --index-url https://test.pypi.org/simple/ \
|
|
118
|
+
--index https://pypi.org/simple/ \
|
|
119
|
+
--from mcp-server-saxo-openapi \
|
|
120
|
+
saxo-doc-helper search-endpoints orders
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Getting started — local clone
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
git clone https://github.com/nohikomiso/mcp-server-saxo-openapi.git
|
|
129
|
+
cd mcp-server-saxo-openapi
|
|
130
|
+
python tools/saxo_doc_helper.py search-endpoints orders
|
|
131
|
+
python tools/saxo_doc_helper.py get-endpoint POST /trade/v2/orders
|
|
132
|
+
python tools/saxo_doc_helper.py get-schema algorithmicorderdata
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Or install editable:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
uv sync
|
|
139
|
+
uv run saxo-doc-helper --version
|
|
140
|
+
uv run saxo-doc-helper search-endpoints orders
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Input normalization
|
|
144
|
+
|
|
145
|
+
| Input | Normalized |
|
|
146
|
+
|-------|------------|
|
|
147
|
+
| `post` | `POST` |
|
|
148
|
+
| `trade/v2/orders` | `/trade/v2/orders` |
|
|
149
|
+
| `https://gateway.saxobank.com/sim/openapi/trade/v2/orders` | `/trade/v2/orders` |
|
|
150
|
+
|
|
151
|
+
If no exact match is found, **Did you mean?** suggestions are returned.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## MCP tools exposed
|
|
156
|
+
|
|
157
|
+
| Tool | Description |
|
|
158
|
+
|------|-------------|
|
|
159
|
+
| `search_saxo_endpoints(query)` | Keyword search across all endpoints |
|
|
160
|
+
| `get_saxo_endpoint_spec(method, path, depth?)` | Parameters + request/response samples |
|
|
161
|
+
| `get_saxo_schema_spec(schema_name, depth?)` | Nested schema drill-down |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Agent integration
|
|
166
|
+
|
|
167
|
+
> When researching Saxo OpenAPI specs, do **not** read `spec/json/` files directly.
|
|
168
|
+
> Use `saxo-doc-helper` (or `python tools/saxo_doc_helper.py` from a clone).
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Repository layout
|
|
173
|
+
|
|
174
|
+
```text
|
|
175
|
+
mcp-server-saxo-openapi/
|
|
176
|
+
├── pyproject.toml
|
|
177
|
+
├── SPEC_FRESHNESS.md
|
|
178
|
+
├── LICENSE
|
|
179
|
+
├── README.md / README.ja.md
|
|
180
|
+
├── CONTRIBUTING.md
|
|
181
|
+
├── docs/
|
|
182
|
+
│ └── MAINTAINER.md
|
|
183
|
+
├── src/saxo_doc_helper/ # installable package (+ data/json)
|
|
184
|
+
├── spec/json/ # maintainer source of truth
|
|
185
|
+
├── tests/
|
|
186
|
+
└── tools/
|
|
187
|
+
└── saxo_doc_helper.py # thin clone-compatible wrapper
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Related projects
|
|
193
|
+
|
|
194
|
+
| Project | Role |
|
|
195
|
+
|---------|------|
|
|
196
|
+
| [saxo-apy](https://github.com/nohikomiso/saxo-apy) | OAuth and session management |
|
|
197
|
+
| [saxo-openapi](https://github.com/nohikomiso/saxo-openapi) | Python REST/WebSocket client (AI-ready) |
|
|
198
|
+
| [@borgels/mcp-server-saxo](https://www.npmjs.com/package/@borgels/mcp-server-saxo) | Live Saxo OpenAPI MCP (npm; unofficial) |
|
|
199
|
+
|
|
200
|
+
This repository provides **spec lookup**. Runtime API access is a separate concern.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Feedback and maintainers
|
|
205
|
+
|
|
206
|
+
- Bugs / stale specs: [GitHub Issues](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues)
|
|
207
|
+
- Maintainers: [docs/MAINTAINER.md](docs/MAINTAINER.md)
|
|
208
|
+
- Source crawl: public Saxo Developer Portal reference docs
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# mcp-server-saxo-openapi
|
|
2
|
+
|
|
3
|
+
**Saxo Bank / サクソバンク証券 OpenAPI 仕様ルックアップ — CLI と MCP サーバー**
|
|
4
|
+
|
|
5
|
+
[English](https://github.com/nohikomiso/mcp-server-saxo-openapi/blob/main/README.md) | 日本語
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
ターミナルまたは Cursor / Claude Desktop などの MCP クライアントから、**サクソバンク証券(Saxo Bank)** OpenAPI のエンドポイントパラメータと JSON サンプルを参照できます。公式リファレンスツリーが深すぎて辿りにくい、という問題向けです。
|
|
16
|
+
|
|
17
|
+
サードパーティ依存なし(Python 標準ライブラリのみ)。仕様 DB は約 260 エンドポイント / 17 サービスグループで、wheel にも同梱されます。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Spec snapshot
|
|
22
|
+
|
|
23
|
+
**Spec snapshot: 2026-07-08**(Saxo Release Notes through **2025/05/15**)。
|
|
24
|
+
|
|
25
|
+
エージェント向けに再構成したスナップショットです。Saxo にドキュメント全体の semver はなく、クロール日と当時の最新 Release Notes 見出しを記録します。詳細: [SPEC_FRESHNESS.md](SPEC_FRESHNESS.md)。
|
|
26
|
+
|
|
27
|
+
欠け・誤り・古さを見つけたら [Issue](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues) をください。PR: [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## これは何か / 何かではないか
|
|
32
|
+
|
|
33
|
+
| 本パッケージ | 対象外 |
|
|
34
|
+
|--------------|--------|
|
|
35
|
+
| オフラインの **仕様ルックアップ**(CLI + MCP) | ライブ取引・ポートフォリオ API |
|
|
36
|
+
| Saxo 認証情報は不要 | OAuth・発注・残高照会 |
|
|
37
|
+
| トークン効率の段階的開示 | フル OpenAPI クライアントの代替 |
|
|
38
|
+
|
|
39
|
+
**ライブ** API を MCP から叩く場合は、コミュニティの [`@borgels/mcp-server-saxo`](https://www.npmjs.com/package/@borgels/mcp-server-saxo)(npm・非公式・別プロジェクト)などを参照。
|
|
40
|
+
|
|
41
|
+
**非公式** — Saxo Bank A/S との提携・推奨はありません。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 機能
|
|
46
|
+
|
|
47
|
+
- **構造化仕様 DB** — ネストパラメータと Request/Response サンプル
|
|
48
|
+
- **CLI** — `search-endpoints` / `get-endpoint` / `get-schema`(depth 制御・Did you mean?)
|
|
49
|
+
- **MCP サーバー** — stdio JSON-RPC、同じ 3 ツール
|
|
50
|
+
- **トークン効率** — 段階的開示
|
|
51
|
+
|
|
52
|
+
**要件:** Python 3.10+
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## はじめに — 推奨(uvx)
|
|
57
|
+
|
|
58
|
+
### 本番 PyPI
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
uvx mcp-server-saxo-openapi
|
|
62
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper search-endpoints orders
|
|
63
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper --version
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
CLI はパッケージ名と違うため `--from mcp-server-saxo-openapi` が必要です。
|
|
67
|
+
|
|
68
|
+
MCP 設定例:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"mcpServers": {
|
|
73
|
+
"saxo-openapi": {
|
|
74
|
+
"command": "uvx",
|
|
75
|
+
"args": ["mcp-server-saxo-openapi"]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### GitHub から
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
uvx --from git+https://github.com/nohikomiso/mcp-server-saxo-openapi.git saxo-doc-helper search-endpoints orders
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### TestPyPI(開発用)
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
uvx --index-url https://test.pypi.org/simple/ \
|
|
91
|
+
--index https://pypi.org/simple/ \
|
|
92
|
+
--from mcp-server-saxo-openapi \
|
|
93
|
+
saxo-doc-helper search-endpoints orders
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## はじめに — ローカル clone
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
git clone https://github.com/nohikomiso/mcp-server-saxo-openapi.git
|
|
102
|
+
cd mcp-server-saxo-openapi
|
|
103
|
+
python tools/saxo_doc_helper.py search-endpoints orders
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
または:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
uv sync
|
|
110
|
+
uv run saxo-doc-helper --version
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 公開 MCP ツール
|
|
116
|
+
|
|
117
|
+
| ツール | 説明 |
|
|
118
|
+
|--------|------|
|
|
119
|
+
| `search_saxo_endpoints(query)` | 全エンドポイントをキーワード検索 |
|
|
120
|
+
| `get_saxo_endpoint_spec(method, path, depth?)` | パラメータ + サンプル JSON |
|
|
121
|
+
| `get_saxo_schema_spec(schema_name, depth?)` | ネストスキーマのドリルダウン |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 関連プロジェクト
|
|
126
|
+
|
|
127
|
+
| プロジェクト | 役割 |
|
|
128
|
+
|--------------|------|
|
|
129
|
+
| [saxo-apy](https://github.com/nohikomiso/saxo-apy) | OAuth / セッション |
|
|
130
|
+
| [saxo-openapi](https://github.com/nohikomiso/saxo-openapi) | REST/WebSocket クライアント |
|
|
131
|
+
| [@borgels/mcp-server-saxo](https://www.npmjs.com/package/@borgels/mcp-server-saxo) | ライブ Saxo OpenAPI MCP(npm・非公式) |
|
|
132
|
+
|
|
133
|
+
本リポジトリは **仕様ルックアップ**。ランタイム API は別レイヤーです。
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## フィードバック
|
|
138
|
+
|
|
139
|
+
- 不具合・古い仕様: [GitHub Issues](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues)
|
|
140
|
+
- メンテ: [docs/MAINTAINER.md](docs/MAINTAINER.md)
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# mcp-server-saxo-openapi
|
|
2
|
+
|
|
3
|
+
**Saxo Bank OpenAPI spec lookup — CLI tool and MCP server**
|
|
4
|
+
|
|
5
|
+
English | [日本語](https://github.com/nohikomiso/mcp-server-saxo-openapi/blob/main/README.ja.md)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
Look up **Saxo Bank** / **Saxobank** OpenAPI endpoint parameters and JSON samples from your terminal, or attach the same tools to Cursor, Claude Desktop, and other MCP clients — without wrestling the deep official reference tree.
|
|
16
|
+
|
|
17
|
+
Zero third-party dependencies (Python stdlib only). Spec database: ~260 endpoints across 17 service groups, shipped inside the wheel.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Spec snapshot
|
|
22
|
+
|
|
23
|
+
**Spec snapshot: 2026-07-08** (Saxo Release Notes through **2025/05/15**).
|
|
24
|
+
|
|
25
|
+
Structured endpoint specs for agents and developers. Saxo does not publish a single docs semver; we record the crawl date and the newest Release Notes heading present at that time. Details: [SPEC_FRESHNESS.md](SPEC_FRESHNESS.md).
|
|
26
|
+
|
|
27
|
+
Missing endpoint, wrong parameter, or something that looks out of date? Please [open an Issue](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues). Pull requests: [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## What this is / is not
|
|
32
|
+
|
|
33
|
+
| This package | Not this package |
|
|
34
|
+
|--------------|------------------|
|
|
35
|
+
| Offline **spec lookup** (CLI + MCP) | Live trading / portfolio API calls |
|
|
36
|
+
| No Saxo credentials required | OAuth, order placement, balances |
|
|
37
|
+
| Token-efficient progressive disclosure | A substitute for a full OpenAPI client |
|
|
38
|
+
|
|
39
|
+
For **live** Saxo OpenAPI access from an MCP client, see community servers such as [`@borgels/mcp-server-saxo`](https://www.npmjs.com/package/@borgels/mcp-server-saxo) (npm, unofficial, separate project).
|
|
40
|
+
|
|
41
|
+
**Unofficial** — not affiliated with or endorsed by Saxo Bank A/S.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Features
|
|
46
|
+
|
|
47
|
+
- **Structured spec database** — nested parameters and request/response samples
|
|
48
|
+
- **CLI** — `search-endpoints`, `get-endpoint`, `get-schema` with depth control and "Did you mean?" suggestions
|
|
49
|
+
- **MCP server** — stdio JSON-RPC; same three tools
|
|
50
|
+
- **Token-efficient** — progressive disclosure (collapsed nested schemas, drill down on demand)
|
|
51
|
+
|
|
52
|
+
**Requirements:** Python 3.10+
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Getting started — recommended (uvx)
|
|
57
|
+
|
|
58
|
+
### Production PyPI
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
uvx mcp-server-saxo-openapi
|
|
62
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper search-endpoints orders
|
|
63
|
+
uvx --from mcp-server-saxo-openapi saxo-doc-helper --version
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`uvx` resolves the **package** name; use `--from mcp-server-saxo-openapi` to run the `saxo-doc-helper` console script.
|
|
67
|
+
|
|
68
|
+
MCP client config:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"mcpServers": {
|
|
73
|
+
"saxo-openapi": {
|
|
74
|
+
"command": "uvx",
|
|
75
|
+
"args": ["mcp-server-saxo-openapi"]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### From GitHub
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
uvx --from git+https://github.com/nohikomiso/mcp-server-saxo-openapi.git saxo-doc-helper search-endpoints orders
|
|
85
|
+
uvx --from git+https://github.com/nohikomiso/mcp-server-saxo-openapi.git mcp-server-saxo-openapi
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### TestPyPI (development only)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
uvx --index-url https://test.pypi.org/simple/ \
|
|
92
|
+
--index https://pypi.org/simple/ \
|
|
93
|
+
--from mcp-server-saxo-openapi \
|
|
94
|
+
saxo-doc-helper search-endpoints orders
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Getting started — local clone
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git clone https://github.com/nohikomiso/mcp-server-saxo-openapi.git
|
|
103
|
+
cd mcp-server-saxo-openapi
|
|
104
|
+
python tools/saxo_doc_helper.py search-endpoints orders
|
|
105
|
+
python tools/saxo_doc_helper.py get-endpoint POST /trade/v2/orders
|
|
106
|
+
python tools/saxo_doc_helper.py get-schema algorithmicorderdata
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Or install editable:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
uv sync
|
|
113
|
+
uv run saxo-doc-helper --version
|
|
114
|
+
uv run saxo-doc-helper search-endpoints orders
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Input normalization
|
|
118
|
+
|
|
119
|
+
| Input | Normalized |
|
|
120
|
+
|-------|------------|
|
|
121
|
+
| `post` | `POST` |
|
|
122
|
+
| `trade/v2/orders` | `/trade/v2/orders` |
|
|
123
|
+
| `https://gateway.saxobank.com/sim/openapi/trade/v2/orders` | `/trade/v2/orders` |
|
|
124
|
+
|
|
125
|
+
If no exact match is found, **Did you mean?** suggestions are returned.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## MCP tools exposed
|
|
130
|
+
|
|
131
|
+
| Tool | Description |
|
|
132
|
+
|------|-------------|
|
|
133
|
+
| `search_saxo_endpoints(query)` | Keyword search across all endpoints |
|
|
134
|
+
| `get_saxo_endpoint_spec(method, path, depth?)` | Parameters + request/response samples |
|
|
135
|
+
| `get_saxo_schema_spec(schema_name, depth?)` | Nested schema drill-down |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Agent integration
|
|
140
|
+
|
|
141
|
+
> When researching Saxo OpenAPI specs, do **not** read `spec/json/` files directly.
|
|
142
|
+
> Use `saxo-doc-helper` (or `python tools/saxo_doc_helper.py` from a clone).
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Repository layout
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
mcp-server-saxo-openapi/
|
|
150
|
+
├── pyproject.toml
|
|
151
|
+
├── SPEC_FRESHNESS.md
|
|
152
|
+
├── LICENSE
|
|
153
|
+
├── README.md / README.ja.md
|
|
154
|
+
├── CONTRIBUTING.md
|
|
155
|
+
├── docs/
|
|
156
|
+
│ └── MAINTAINER.md
|
|
157
|
+
├── src/saxo_doc_helper/ # installable package (+ data/json)
|
|
158
|
+
├── spec/json/ # maintainer source of truth
|
|
159
|
+
├── tests/
|
|
160
|
+
└── tools/
|
|
161
|
+
└── saxo_doc_helper.py # thin clone-compatible wrapper
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Related projects
|
|
167
|
+
|
|
168
|
+
| Project | Role |
|
|
169
|
+
|---------|------|
|
|
170
|
+
| [saxo-apy](https://github.com/nohikomiso/saxo-apy) | OAuth and session management |
|
|
171
|
+
| [saxo-openapi](https://github.com/nohikomiso/saxo-openapi) | Python REST/WebSocket client (AI-ready) |
|
|
172
|
+
| [@borgels/mcp-server-saxo](https://www.npmjs.com/package/@borgels/mcp-server-saxo) | Live Saxo OpenAPI MCP (npm; unofficial) |
|
|
173
|
+
|
|
174
|
+
This repository provides **spec lookup**. Runtime API access is a separate concern.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Feedback and maintainers
|
|
179
|
+
|
|
180
|
+
- Bugs / stale specs: [GitHub Issues](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues)
|
|
181
|
+
- Maintainers: [docs/MAINTAINER.md](docs/MAINTAINER.md)
|
|
182
|
+
- Source crawl: public Saxo Developer Portal reference docs
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## License
|
|
187
|
+
|
|
188
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Spec freshness
|
|
2
|
+
|
|
3
|
+
| Field | Value |
|
|
4
|
+
|-------|-------|
|
|
5
|
+
| **Spec snapshot** | `2026-07-08` |
|
|
6
|
+
| **Saxo Release Notes through** | `2025/05/15` |
|
|
7
|
+
| Package version | `0.1.1` (tool/PyPI version; independent of the snapshot dates) |
|
|
8
|
+
|
|
9
|
+
There is **no single semver** for the whole Saxo OpenAPI documentation set. Saxo publishes dated [Release Notes](https://www.developer.saxo/openapi/releasenotes/release-notes) (e.g. `Release 2025/05/15`). Endpoint paths may contain `v1`/`v2` — those are per-service API versions, not a global docs version.
|
|
10
|
+
|
|
11
|
+
## What the dates mean
|
|
12
|
+
|
|
13
|
+
- **Spec snapshot** — the day this repository’s structured `spec/json/` was crawled/synced from the Saxo Developer Portal.
|
|
14
|
+
- **Saxo Release Notes through** — the newest Release Notes heading present on the portal when that snapshot was taken.
|
|
15
|
+
|
|
16
|
+
## Source
|
|
17
|
+
|
|
18
|
+
- Reference docs: https://www.developer.saxo/openapi/referencedocs
|
|
19
|
+
- Release notes: https://www.developer.saxo/openapi/releasenotes
|
|
20
|
+
- Planned changes: https://www.developer.saxo/openapi/releasenotes/planned-changes
|
|
21
|
+
|
|
22
|
+
Maintainers detect portal updates by hashing the Release Notes and Planned Changes pages (see the private workspace crawler `check_change_detection`), then re-crawl, update this file, sync package data, and publish a new package version.
|
|
23
|
+
|
|
24
|
+
## Feedback
|
|
25
|
+
|
|
26
|
+
Missing endpoint, wrong parameter, or something that looks out of date? Please [open an Issue](https://github.com/nohikomiso/mcp-server-saxo-openapi/issues).
|