Spaces:
Sleeping
Sleeping
File size: 2,155 Bytes
01f0e50 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
from mcp.server.fastmcp import FastMCP
from accounts import Account
mcp = FastMCP("accounts_server")
@mcp.tool()
async def get_balance(name: str) -> float:
"""Get the cash balance of the given account name.
Args:
name: The name of the account holder
"""
return Account.get(name).balance
@mcp.tool()
async def get_holdings(name: str) -> dict[str, int]:
"""Get the holdings of the given account name.
Args:
name: The name of the account holder
"""
return Account.get(name).holdings
@mcp.tool()
async def buy_shares(name: str, symbol: str, quantity: int, rationale: str) -> float:
"""Buy shares of a stock.
Args:
name: The name of the account holder
symbol: The symbol of the stock
quantity: The quantity of shares to buy
rationale: The rationale for the purchase and fit with the account's strategy
"""
return Account.get(name).buy_shares(symbol, quantity, rationale)
@mcp.tool()
async def sell_shares(name: str, symbol: str, quantity: int, rationale: str) -> float:
"""Sell shares of a stock.
Args:
name: The name of the account holder
symbol: The symbol of the stock
quantity: The quantity of shares to sell
rationale: The rationale for the sale and fit with the account's strategy
"""
return Account.get(name).sell_shares(symbol, quantity, rationale)
@mcp.tool()
async def change_strategy(name: str, strategy: str) -> str:
"""At your discretion, if you choose to, call this to change your investment strategy for the future.
Args:
name: The name of the account holder
strategy: The new strategy for the account
"""
return Account.get(name).change_strategy(strategy)
@mcp.resource("accounts://accounts_server/{name}")
async def read_account_resource(name: str) -> str:
account = Account.get(name.lower())
return account.report()
@mcp.resource("accounts://strategy/{name}")
async def read_strategy_resource(name: str) -> str:
account = Account.get(name.lower())
return account.get_strategy()
if __name__ == "__main__":
mcp.run(transport='stdio') |