使用说明
Fi MCP文档
概述
Fi MCP(模型上下文协议)为Fi Money平台的用户提供对全面财务数据的访问。该MCP使开发人员能够构建应用程序,分析用户的财务状况,提供见解,并根据真实账户数据创建个性化的财务建议。
可用工具
1. fetch_net_worth
目的:使用关联账户的实际数据计算综合净值
用例:
- 投资组合分析和资产配置见解
- 净值跟踪和可视化
- 财务健康评估
- 投资业绩分析
- 债务与资产比率计算
数据源:
- 银行账户余额
- 共同基金持有量和现值
- 印度股票投资组合
- 美国股票投资(如果通过Fi Money应用程序投资)
- EPF账户余额
- 信用卡债务和贷款余额
- 其他关联资产/负债
Response Format
{
"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
}
]
}
}
}
}
}
错误处理:
- 如果没有连接任何金融账户,则返回空结果
- 如果未检测到,则提示用户连接共同基金账户
- 仅包括来自关联账户的数据(无估计)
2. fetch_credit_report
目的:检索综合信用报告信息
用例:
- 信用评分监控
- 基于利率的贷款优先级
- 信贷利用分析
数据包括:
- 信用评分
- 主动、已关闭的贷款详细信息及利率
- 信用卡使用率
- 最近的信用查询
- 出生日期信息
Response Format
{
"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"
}
]
}
错误处理:
- 如果未连接,则返回“无可用信用评分数据”
- 提示用户在Fi Money应用程序中连接信用档案
3. fetch_epf_details
目的:访问员工公积金账户信息
用例:
- 退休计划计算
- EPF贡献跟踪
- 利息收益分析
- 雇主出资验证
数据包括:
- 经常账户余额
- 雇主和雇佣详情
- 员工供款总额
- 雇主出资总额
Response Format
{
"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
}
}
}
}
]
}
错误处理:
- 指示用户在未连接的情况下通过Fi Money应用程序链接EPF帐户
4. fetch_mf_transactions
目的:检索共同基金交易历史记录以进行投资组合分析
用例:
- XIRR(扩展内部收益率)计算
- 投资业绩跟踪
- 交易模式分析
- 投资组合再平衡见解
当前作用域:
- 共同基金交易(买入、卖出、SIP等)
- 交易日期和金额
- 资金交易历史
Response Format
{
"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
}
]
}
响应结构说明:
purchasePrice:交易执行时的资产净值transactionAmount:投资/赎回总额transactionUnits:买入/卖出的单位数量transactionMode:“N”表示正常,其他模式可能包括SIP等。externalOrderType:“买入”表示买入,“卖出”表示赎回- 使用金额
units(主要金额)和nanos(分数部分)结构 - XIRR计算需要使用此事务数据单独完成
错误处理:
- 返回可用数据,明确指出限制
- 指定不包括哪些交易类型
- SIP性能评估员
5. fetch_bank_transactions
目的:访问连接到Fi Money应用程序的银行交易数据
用例:
- 连接到Fi Money应用程序的所有银行交易数据
数据包括:
- 交易金额
- 交易记录
- 交易日期
- 交易后的当前余额
Response Format
{
"schemaDescription": "A list of bank transactions. Each 'txns' field is a list of data arrays with schema: [transactionAmount, transactionNarration, transactionDate, transactionType (1 for CREDIT, 2 for DEBIT, 3 for OPENING, 4 for INTEREST, 5 for TDS, 6 for INSTALLMENT, 7 for CLOSING and 8 for OTHERS), transactionMode, currentBalance].\n We currently have have only last two month transaction, older transaction are coming soon...",
"bankTransactions": [
{
"bank": "HDFC Bank",
"txns": [
[
"80085",
"UPI-SHEETAL RAVINDRA DA-SHEETAL.DAMBAL@OKSBI-SBIN0010411-109209224698-SUFYAN",
"2025-07-09",
1,
"CARD_PAYMENT",
"-79109"
],
[
"80677",
"UPI-DREAMPLUG TECHNOLOGI-CRED@AXISB-UTIB0000114-009400589368-CREDIT CARD BILL P",
"2025-07-09",
2,
"FT",
"1568"
]
]
}
]
}
6. fetch_stock_transactions
目的:从连接到Fi Money应用程序的帐户访问股票交易
用例:
- 所有已关联的股票交易
数据包括:
- ISIN作为交易标识符
- 交易类型(买入、卖出、分红)
- 交易日期
- 交易导航值
Response Format
{
"schemaDescription": "A list of stock transactions. Each 'txns' field is a list of data arrays with schema: [transactionType (1 for BUY, 2 for SELL, 3 for BONUS, 4 for SPLIT), transactionDate, quantity, navValue]. nav value may not be present in some of the transactions",
"stockTransactions": [
{
"isin": "INE0BWS23018",
"txns": [
[
1,
"2023-05-04",
100
],
[
1,
"2023-05-04",
170
]
]
},
{
"isin": "INF204KB14I5",
"txns": [
[
1,
"2023-05-04",
100,
10.51
]
]
}
]
}
集成指南
错误处理最佳实践
- 连接状态:在显示数据之前,始终检查所需的帐户是否已连接
- 数据可用性:处理特定数据类型可能不可用的情况
- 用户指南:就如何连接丢失的帐户提供明确的说明
- 故障弱化:设计UI,以便在某些帐户未连接时处理部分数据
安全考虑
- 数据隐私:切勿存储或缓存敏感的财务数据
- 认证:在访问MCP之前,确保正确的用户身份验证
- 数据显示:使用适当的格式显示财务数据
性能优化
- 批处理:尽可能拨打与集团相关的MCP电话
- 错误恢复:对失败的调用实施重试机制
如何创建MCP客户端
用于连接到服务器的最简单的Python MCP客户端
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代码段
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代码段
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();
}
}
EPF余额跟踪
Javascript代码段
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();
}
}
共同基金XIRR计算
Javascript代码段
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();
}
}
关键数据结构注释
货币格式
API中的所有货币值都使用以下结构:
{
"currencyCode": "INR",
"units": "string_value",
"nanos": "numeric_fractional_value"
}
units:字符串形式的主要货币金额nanos:分数部分(1纳米=1/100亿单位)- 要获取实际值:
parseFloat(units) + (nanos / 1000000000)
资产类型映射
ASSET_TYPE_EPF:员工公积金余额ASSET_TYPE_INDIAN_SECURITIES:印度股票持有量ASSET_TYPE_SAVINGS_ACCOUNTS:银行账户余额ASSET_TYPE_MUTUAL_FUND:共同基金投资组合价值ASSET_TYPE_US_SECURITIES:美国股票投资
信用账户类型
- 账户类型“10”:信用卡账户
- 帐户状态“11”:活动帐户
- 付款评级“0”:当前(无延迟)
日期格式
- EPF日期:“DD-MM-YYYY”格式
- 交易日期:ISO 8601格式(“YYYY-MM-DDTHH:MM:SSZ”)
- 信用报告日期:“YYYYMMDD”格式
常见问题
- 部分数据:某些工具可能会根据用户当前连接的帐户返回有限的数据
- 身份验证错误:确保正确的MCP身份验证和权限
最佳实践
- 提供清晰的错误消息和可操作的步骤
- 为异步操作实现适当的加载状态
获取帮助
- 查看错误消息以获取具体指导
- 使用不同的帐户连接场景进行测试
本文档涵盖了Fi MCP的当前版本。功能和性能可能会在未来的版本中扩展。