Montrose API (MCP) - Programmera mot det

Den här tråden fokuserar primärt på att använda Montrose:s MCP som ett vanligt API från kod. Dvs, direkta anrop från program eller skript, ej från en AI-bot.


Conzums pekade ut att Montrose nu har en MCP-endpoint:

Den går självklart att använda från AI-bottar, men det borde också gå bra att använda den som ett vanligt API!

Jag ser framför mig hur man kan t ex kan suga in siffror i sitt kalkylblad eller förbereda fondköp med rätt balansering, beräknat mot nuvarande innehav.

Vet inte om man skulle våga lita på ett lib som någon annan lägger upp, men man kan ju knappa egna anrop iaf :slight_smile: .

API

Verkar vara ett read-only-API där man kan förbereda ordrar åt användaren. Montrose skriver:

Du som kund kan exempelvis be om att köpa en specifik aktie för tillgänglig kassa i portföljen. Agenten förbereder då ordern i AI-gränssnittet och skickar tillbaka en länk vidare till Montrose, där du loggar in och själv godkänner ordern.

Vad kan jag göra med Montrose MCP?

Du kan till exempel:

  • se hur din portfölj är fördelad mellan olika branscher
  • få en överblick över dina största innehav
  • följa nyheter kopplade till din portfölj
  • få hjälp att analysera din exponering
  • förbereda ett köp baserat på din tillgängliga kassa

(Text nedan lyft delvis från Montrose #619)

Kan inget om MCP-protokollet och jag misslyckades med att använda ett färdigt interaktivt utforskningsprogram (mcp-probe), men ett snabb-Claude:at Python-script gav nedanståend “tools” vid förfrågan mot servern. (Tips på att använda ett färdigt verktyg mottages gärna.)

==================================================
  TOOLS (3)
==================================================

  • get_holdings
    Returns holdings for either one account (when accountId is provided) or all accessible accounts. Use GetUserAccounts first to find valid account IDs.
    Parameters:
      - accountId (['string', 'null']) *: Optional account ID. If omitted, holdings are returned for all accessible accounts.

  • create_trade_ticket
    Creates a pre-filled trade ticket URL for the Montrose app. Specify side (Buy/Sell), quantity or amount, and an instrument identifier. Instruments can be specified by orderbookId directly, or by ticker/name which will be resolved automatically. Returns a URL that opens the trade ticket in the Montrose app with the order details pre-filled.
    Parameters:
      - side (string) *: The side of the order: Buy or Sell.
      - orderbookId (['integer', 'null']): Optional orderbookId (int) to identify the instrument directly.
      - ticker (['string', 'null']): Optional ticker (string) to identify the instrument by ticker symbol, e.g. "VOLV B".
      - name (['string', 'null']): Optional instrument name (string) to search for the instrument.
      - quantity (['number', 'null']): Optional number of shares to trade. Exactly one of quantity or amount must be provided.
      - amount (['number', 'null']): Optional SEK amount to trade. Exactly one of quantity or amount must be provided.
      - price (['number', 'null']): Optional price for the order.
      - accountId (['string', 'null']): Optional account ID. Use GetUserAccounts to find valid account IDs.

  • get_user_accounts
    Returns all user accounts with stable account IDs and display names. Use this tool to discover valid account IDs before calling GetHoldings for a specific account.

Anonymiserat resultat från get_holdings, med accountId: null:

[
  {
    "accountId": "00000000-0000-0000-0000-000000000000",
    "accountNumber": "1234567",
    "accountName": "Mitt konto",
    "currency": "SEK",
    "summary": {
      "totalMarketValue": 123.45,
      "availableForPurchase": 12.34,
      "totalValue": 123.45,
      "currency": "SEK"
    },
    "positions": [
      {
        "instrumentName": "L\u00C4NSF\u00D6RS\u00C4KRINGAR GLOBAL INDEX",
        "ticker": "LF GLOB",
        "orderbookId": 3361,
        "possibleOrderbookIds": [],
        "quantity": 12.34,
        "marketValue": {
          "accountCurrency": 123.45,
          "instrumentCurrency": 123.45
        },
        "unrealizedResult": {
          "accountCurrency": 12.34,
          "instrumentCurrency": 12.34
        },
        "unrealizedResultPercent": 1.23,
        "instrumentCurrency": "SEK",
        "fxRate": 1
      }
    ]
  }
]

Python-script

Här är skriptet jag använt ovan:

mcp-query.py (Ser rimligt men kanske inte optimalt ut. Såg inga rader som läcker data.)
requirements.txt

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 mcp-query.py

Rust?

Lite sugen på att se om det går att göra något i Rust, men som sagt för dåligt insatt i MCP. Det här kanske är en bra start:
https://github.com/modelcontextprotocol/rust-sdk/blob/main/docs/OAUTH_SUPPORT.md
https://github.com/modelcontextprotocol/rust-sdk/blob/main/examples/clients/src/auth/oauth_client.rs

1 gillning

Mcp är ju ett api som du är inne på. Ser inga problem med att göra som du tänkt. Men AI är väldigt bra på att sammanfatta saker, varför lägga i excel?

Sammanställning av konton från olika banker och över tid. Garanterat inga slumpmässiga felräkningar. Vet inte heller om jag vill dela min data till AI-leverantörerna.

Kör du claude code eller motsvarande så kan du bara be den verifiera matten, då skriver den ett python script som verifierar. Kommer nog få jobba lite med att generera slides, excel osv framåt.. inte jobbat så mycket med annat än kod innan så lite dålig koll.

Flytten till Montrose känns mer och mer rätt!

Jag skulle tro att det enklaste sättet för en person utan utvecklarbakgrund är att använda ett redan befintligt gränssnitt med MCP funktionalitet, som t.ex. Claude Desktop eller Gemini Cli. Att bygga en helt egen integrationslösning verkar lite overkill.