Skip to main content
Glama

ntropy-mcp MCP Server

Official
client.py6.31 kB
import asyncio import os import json from typing import Optional, List, Dict, Any from contextlib import AsyncExitStack from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client from dotenv import load_dotenv load_dotenv() class NtropyMCPClient: """Client for testing the Ntropy MCP server""" def __init__(self): """Initialize the client""" self.session: Optional[ClientSession] = None self.exit_stack = AsyncExitStack() async def connect_to_server(self): """Connect to the Ntropy MCP server using uvx""" api_key = os.environ.get("NTROPY_API_KEY") # Create server parameters server_params = StdioServerParameters( command="uvx", args=["ntropy-mcp", "--api-key", api_key], env=None ) # Set up the connection stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params)) read, write = stdio_transport self.session = await self.exit_stack.enter_async_context(ClientSession(read, write)) # Initialize the connection await self.session.initialize() # List available tools response = await self.session.list_tools() tools = response.tools print("\nAvailable tools:") for tool in tools: print(f"- {tool.name}: {tool.description}") return tools async def call_tool(self, tool_name: str, **kwargs): """Call a tool on the server Args: tool_name: Name of the tool to call **kwargs: Arguments to pass to the tool Returns: The result of the tool call """ if not self.session: raise ValueError("Not connected to server. Call connect_to_server first.") print(f"\nCalling tool: {tool_name}") print(f"Arguments: {json.dumps(kwargs, indent=2)}") result = await self.session.call_tool(tool_name, kwargs) print("\nResult:") print(json.dumps(result.content, indent=2)) return result.content async def check_connection(self): """Check connection to the Ntropy API""" return await self.call_tool("check_connection") async def create_account_holder(self, id: str, type: str, name: str): """Create an account holder""" return await self.call_tool("create_account_holder", id=id, type=type, name=name) async def enrich_transaction(self, id: str, description: str, date: str, amount: float, entry_type: str, currency: str, account_holder_id: str, country: str = None): """Enrich a transaction""" args = { "id": id, "description": description, "date": date, "amount": amount, "entry_type": entry_type, "currency": currency, "account_holder_id": account_holder_id } if country: args["country"] = country return await self.call_tool("enrich_transaction", **args) async def list_transactions(self, account_holder_id: str, limit: int = 10, offset: int = 0): """List transactions for an account holder""" return await self.call_tool("list_transactions", account_holder_id=account_holder_id, limit=limit, offset=offset) async def bulk_enrich_transactions(self, transactions: List[Dict[str, Any]]): """Bulk enrich multiple transactions""" return await self.call_tool("bulk_enrich_transactions", transactions=transactions) async def cleanup(self): """Clean up resources""" await self.exit_stack.aclose() async def run(): """Run a demonstration of the Ntropy MCP client""" client = NtropyMCPClient() try: # Connect to the server using uvx await client.connect_to_server() # Check connection to Ntropy API print("\n1. Checking connection to Ntropy API...") await client.check_connection() # Create an account holder print("\n2. Creating account holder...") account_holder = await client.create_account_holder( id="test_user_123", type="individual", name="Test User" ) account_holder_id = account_holder.get("id", "test_user_123") # Enrich a single transaction print("\n3. Enriching a single transaction...") await client.enrich_transaction( id="tx_001", description="AMAZON.COM*MK1AB6TE1", date="2023-05-15", amount=-29.99, entry_type="debit", currency="USD", account_holder_id=account_holder_id, country="US" ) # Enrich a batch of transactions print("\n4. Bulk enriching multiple transactions...") transactions = [ { "id": "tx_002", "description": "NETFLIX.COM", "date": "2023-05-16", "amount": -13.99, "entry_type": "debit", "currency": "USD", "account_holder_id": account_holder_id }, { "id": "tx_003", "description": "Starbucks Coffee", "date": "2023-05-17", "amount": -5.65, "entry_type": "debit", "currency": "USD", "account_holder_id": account_holder_id } ] await client.bulk_enrich_transactions(transactions) # List transactions for the account holder print("\n5. Listing transactions for account holder...") await client.list_transactions(account_holder_id) except Exception as e: print(f"\nError: {str(e)}") finally: # Clean up resources await client.cleanup() if __name__ == "__main__": asyncio.run(run())

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ntropy-network/ntropy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server