
Fi
STREAMABLE HTTPFi MCP provides comprehensive financial data access for portfolio analysis and financial health insights
Fi MCP provides comprehensive financial data access for portfolio analysis and financial health insights
The Fi MCP (Model Context Protocol) provides access to comprehensive financial data for users of the Fi Money platform. This MCP enables developers to build applications that can analyze users' financial health, provide insights, and create personalized financial recommendations based on real account data.
fetch_net_worth
Purpose: Calculate comprehensive net worth using actual data from connected accounts
Use Cases:
Data Sources:
{ "netWorthResponse": { "totalNetWorthValue": { "currencyCode": "string" // e.g. INR "units": "string" // e.g. total net worth amount }, "assetValues": [ { "netWorthAttribute": "string" // e.g. ASSET_TYPE_EPF "value": { "currencyCode": "string" // e.g. INR "units": "string" // e.g. individual asset value } } // Only one sample asset shown ] }, "mfSchemeAnalytics": { "schemeAnalytics": [ { "schemeDetail": { "amc": "string" // e.g. QUANT_MONEY_MANAGERS "nameData": { "longName": "string" // e.g. fund name }, "planType": "string" // e.g. DIRECT "investmentType": "string" // e.g. OPEN "optionType": "string" // e.g. GROWTH "nav": { "currencyCode": "string" // e.g. INR "units": "string" // e.g. NAV whole part "nanos": "number" // e.g. NAV fractional part }, "assetClass": "string" // e.g. EQUITY "isinNumber": "string" // e.g. INF123L01234 "categoryName": "string" // e.g. ELSS_TAX_SAVING "fundhouseDefinedRiskLevel": "string" // e.g. VERY_HIGH_RISK }, "enrichedAnalytics": { "analytics": { "schemeDetails": { "currentValue": { "currencyCode": "string" "units": "string" "nanos": "number" }, "investedValue": { "currencyCode": "string" "units": "string" "nanos": "number" }, "XIRR": "number" // e.g. % return "absoluteReturns": { "currencyCode": "string" "units": "string" "nanos": "number" }, "unrealisedReturns": { "currencyCode": "string" "units": "string" "nanos": "number" }, "navValue": { "currencyCode": "string" "units": "string" "nanos": "number" }, "units": "number" // e.g. 123.01 } } } } ] }, "accountDetailsBulkResponse": { "accountDetailsMap": { "accountId": { "accountDetails": { "fipId": "string" // e.g. KotakMahindraBank-FIP "maskedAccountNumber": "string" // e.g. XXXXXX1234 "accInstrumentType": "string" // e.g. ACC_INSTRUMENT_TYPE_DEPOSIT "ifscCode": "string" // e.g. ABCD0000123 "accountType": { "depositAccountType": "string" // e.g. DEPOSIT_ACCOUNT_TYPE_SAVINGS }, "fipMeta": { "name": "string" // e.g. Kotak Mahindra Bank "displayName": "string" // e.g. Kotak "bank": "string" // e.g. KOTAK } }, "depositSummary": { "accountId": "string" "currentBalance": { "currencyCode": "string" "units": "string" "nanos": "number" }, "balanceDate": "ISODate" // e.g. 2025-01-01T11:59:59.149Z "depositAccountType": "string" "branch": "string" "ifscCode": "string" "openingDate": "ISODate" "depositAccountStatus": "string" }, "equitySummary": { "accountId": "string" "currentValue": { "currencyCode": "string" "units": "string" "nanos": "number" }, "holdingsInfo": [ { "isin": "string" // e.g. INE00H001014 "issuerName": "string" // e.g. EPIFI LIMITED "type": "string" // e.g. EQUITY_HOLDING_TYPE_DEMAT "units": "number" // e.g. quantity held "lastTradedPrice": { "currencyCode": "string" "units": "string" "nanos": "number" }, "isinDescription": "string" // e.g. EPIFI LIMITED-EQ } ] } } } } }
Error Handling:
fetch_credit_report
Purpose: Retrieve comprehensive credit report information
Use Cases:
Data Included:
{ "creditReports": [ { "creditReportData": { "userMessage": { "userMessageText": "string" // e.g. Normal Response }, "creditProfileHeader": { "reportDate": "string" // e.g. 20250101 "reportTime": "string" // e.g. 235959 }, "currentApplication": { "currentApplicationDetails": { "enquiryReason": "string" // e.g. 6 "amountFinanced": "string" // e.g. 0 "durationOfAgreement": "string" // e.g. 0 "currentApplicantDetails": { "dateOfBirthApplicant": "string" // e.g. 19690131 } } }, "creditAccount": { "creditAccountSummary": { "account": { "creditAccountTotal": "string" // e.g. 2 "creditAccountActive": "string" // e.g. 2 "creditAccountDefault": "string" // e.g. 0 "creditAccountClosed": "string" // e.g. 0 "cadSuitFiledCurrentBalance": "string" // e.g. 0 }, "totalOutstandingBalance": { "outstandingBalanceSecured": "string" // e.g. 10000 "outstandingBalanceSecuredPercentage": "string" // e.g. 20 "outstandingBalanceUnSecured": "string" // e.g. 40000 "outstandingBalanceUnSecuredPercentage": "string" // e.g. 80 "outstandingBalanceAll": "string" // e.g. 50000 } }, "creditAccountDetails": [ { "identificationNumber": "string" // e.g. AV12345678 "subscriberName": "string" // e.g. Federal Bank "portfolioType": "string" // e.g. R "accountType": "string" // e.g. 10 "openDate": "string" // e.g. 20250101 "creditLimitAmount": "string" // e.g. 500000 "highestCreditOrOriginalLoanAmount": "string" // e.g. 80000 "accountStatus": "string" // e.g. 11 "paymentRating": "string" // e.g. 0 "paymentHistoryProfile": "string" // e.g. 000000000000000000000000?00000000000 "currentBalance": "string" // e.g. 0 "amountPastDue": "string" // e.g. 0 "dateReported": "string" // e.g. 20250701 "dateOfLastPayment": "string" // e.g. 20250701 "repaymentTenure": "string" // e.g. 0 "dateOfAddition": "string" // e.g. 20220101 "currencyCode": "string" // e.g. INR "accountHolderTypeCode": "string" // e.g. 1 } ] }, "matchResult": { "exactMatch": "string" // e.g. Y }, "totalCapsSummary": { "totalCapsLast7Days": "string" // e.g. 0 "totalCapsLast30Days": "string" // e.g. 0 "totalCapsLast90Days": "string" // e.g. 0 "totalCapsLast180Days": "string" // e.g. 0 }, "nonCreditCaps": { "nonCreditCapsSummary": { "nonCreditCapsLast7Days": "string" // e.g. 0 "nonCreditCapsLast30Days": "string" // e.g. 0 "nonCreditCapsLast90Days": "string" // e.g. 0 "nonCreditCapsLast180Days": "string" // e.g. 0 } }, "score": { "bureauScore": "string" // e.g. 800 }, "caps": { "capsSummary": { "capsLast7Days": "string" // e.g. 0 "capsLast30Days": "string" // e.g. 0 "capsLast90Days": "string" // e.g. 0 "capsLast180Days": "string" // e.g. 0 }, } }, "vendor": "EXPERIAN" } ] }
Error Handling:
fetch_epf_details
Purpose: Access Employee Provident Fund account information
Use Cases:
Data Included:
{ "uanAccounts": [ { "phoneNumber": {}, // object (structure not specified) "rawDetails": { "est_details": [ { "est_name": "string", // e.g. Company Name "member_id": "string", // e.g. RJRAJ12345690000012345 "office": "string", // e.g. (RO)JAIPUR "doj_epf": "string", // e.g. 01-01-2020 "doe_epf": "string", // e.g. 01-01-2025 "doe_eps": "string", // e.g. 01-01-2025 "pf_balance": { "is_pf_full_withdrawn": true, // boolean "employee_share": { "debit": "string", // e.g. 12345 "credit": "string" // e.g. 12345 }, "employer_share": { "debit": "string", // e.g. 1234 "credit": "string" // e.g. 1234 } } }, "overall_pf_balance": { "pension_balance": "string", // e.g. 12345 "current_pf_balance": "string", // e.g. 54321 "employee_share_total": { "debit": "string", // e.g. 12345 "credit": "string", // e.g. 54321 "balance": "string" // e.g. 12345 }, "employer_share_total": { "debit": "string", // e.g. 1234 "credit": "string", // e.g. 12345 "balance": "string" // e.g. 123456 } } } } ] }
Error Handling:
fetch_mf_transactions
Purpose: Retrieve mutual funds transaction history for portfolio analysis
Use Cases:
Current Scope:
{ "transactions": [ { "isinNumber": "string", // e.g. INF123L01234 "folioId": "string", // e.g. 1234567890 "externalOrderType": "string", // e.g. BUY "transactionDate": "string", // e.g. 2025-01-01T23:59:59Z (ISO format) "purchasePrice": { "currencyCode": "string", // e.g. INR "units": "string", // e.g. 250 "nanos": "number" // e.g. 785200000 }, "transactionAmount": { "currencyCode": "string", // e.g. INR "units": "string", // e.g. 9999 "nanos": "number" // e.g. 500000000 }, "transactionUnits": "number", // e.g. 98.765 "transactionMode": "string", // e.g. N "schemeName": "string", // e.g. Epifi Tax Saver Fund - Direct Plan "stampDuty": "number" // e.g. 0.1 } ] }
Notes on Response Structure:
purchasePrice
: NAV at which transaction was executedtransactionAmount
: Total amount invested/redeemedtransactionUnits
: Number of units bought/soldtransactionMode
: "N" for Normal, other modes may include SIP, etc.externalOrderType
: "BUY" for purchases, "SELL" for redemptionsunits
(main amount) and nanos
(fractional part) structureCurrent Limitations:
Error Handling:
How to create the MCP Client
Simplest Python MCP client for connecting to server
from mcp.client.streamable_http import streamablehttp_client from mcp.client.session import ClientSession import asyncio async def main(): try: async with streamablehttp_client("https://mcp.fi.money:8080/mcp/stream") as ( read_stream, write_stream, _, ): async with ClientSession( read_stream, write_stream, ) as session: await session.initialize() tools = await session.list_tools() print(tools) except Exception as e: print(f"error: {e}") if __name__ == "__main__": asyncio.run(main())
Javascript snippet
async function getUserNetWorth() { try { const response = await mcp.call('networth:fetch_net_worth'); if (response.netWorthResponse && response.netWorthResponse.totalNetWorthValue) { const totalValue = response.netWorthResponse.totalNetWorthValue.units; const assets = response.netWorthResponse.assetValues; displayNetWorth(totalValue, assets); } else { promptAccountConnection(); } } catch (error) { handleError(error); } }
Javascript snippet
async function getCreditInsights() { try { const response = await mcp.call('networth:fetch_credit_report'); if (response.creditReports && response.creditReports.length > 0) { const creditData = response.creditReports[0].creditReportData; const score = creditData.score.bureauScore; const dateOfBirth = creditData.currentApplication.currentApplicationDetails.currentApplicantDetails.dateOfBirthApplicant; const accounts = creditData.creditAccount.creditAccountDetails; analyzeCreditScore(score, dateOfBirth, accounts); } else { promptCreditConnection(); } } catch (error) { showCreditError(); } }
Javascript snippet
async function getEPFDetails() { try { const response = await mcp.call('networth:fetch_epf_details'); if (response.uanAccounts && response.uanAccounts.length > 0) { const epfData = response.uanAccounts[0].rawDetails; const totalBalance = epfData.overall_pf_balance.current_pf_balance; const employeeShare = epfData.overall_pf_balance.employee_share_total.balance; const employerShare = epfData.overall_pf_balance.employer_share_total.balance; displayEPFBreakdown(totalBalance, employeeShare, employerShare); } else { promptEPFConnection(); } } catch (error) { handleEPFError(); } }
Javascript snippet
async function calculatePortfolioXIRR() { try { const response = await mcp.call('networth:fetch_mf_transactions'); if (response.transactions && response.transactions.length > 0) { const transactions = response.transactions; // Group transactions by scheme const groupedTransactions = transactions.reduce((acc, tx) => { if (!acc[tx.isinNumber]) { acc[tx.isinNumber] = []; } acc[tx.isinNumber].push({ date: new Date(tx.transactionDate), amount: parseFloat(tx.transactionAmount.units) + (tx.transactionAmount.nanos / 1000000000), type: tx.externalOrderType }); return acc; }, {}); // Calculate XIRR for each scheme calculateXIRRByScheme(groupedTransactions); } else { showNoTransactionsMessage(); } } catch (error) { handleTransactionError(); } }
All monetary values in the API use the following structure:
{ "currencyCode": "INR", "units": "string_value", "nanos": "numeric_fractional_value" }
units
: Main currency amount as stringnanos
: Fractional part (1 nano = 1/1,000,000,000 of a unit)parseFloat(units) + (nanos / 1000000000)
ASSET_TYPE_EPF
: Employee Provident Fund balanceASSET_TYPE_INDIAN_SECURITIES
: Indian stock holdingsASSET_TYPE_SAVINGS_ACCOUNTS
: Bank account balancesASSET_TYPE_MUTUAL_FUND
: Mutual fund portfolio valueASSET_TYPE_US_SECURITIES
: US stock investmentsThis documentation covers the current version of the Fi MCP. Features and capabilities may be expanded in future versions.