使用说明
fi mcp开发
Fi MCP服务器的最低版本,可用于黑客马拉松。该项目提供了一个轻量级的模拟服务器,用于黑客马拉松、演示和开发,用虚拟数据和简化的身份验证模拟生产Fi MCP服务器的核心功能。
目的
- fi mcp开发 是为那些希望在不访问真实用户数据或生产系统的情况下尝试Fi-MCP API的黑客马拉松参与者和开发人员设计的。
- 它提供虚拟财务数据,并使用虚拟身份验证流程,使其在非生产环境中安全易用。
特性
- 模拟Fi-MCP API:实现净值、信用报告、EPF详细信息、共同基金交易和银行交易的端点。
- 虚拟数据:所有响应都来自静态JSON文件
test_data_dir/,代表各种用户场景。 - 伪身份验证:使用允许的电话号码(目录名)的简单登录流程
test_data_dir/).没有真正的OTP或用户验证。 - 黑客马拉松准备就绪:没有真正的集成,没有敏感数据,易于重置或扩展。
目录结构
main.go--入口点,设置服务器和端点。middlewares/auth.go--实现虚拟身份验证和会话管理。test_data_dir/--包含以允许的电话号码命名的目录。每个目录保存不同API响应的JSON文件(例如。,fetch_net_worth.json).static/--登录和登录成功页面的HTML文件。
虚拟数据场景
虚拟数据涵盖了各种用户状态。示例场景:
- 所有关联资产:银行、EPF、印度股票、美国股票、信用报告、大型或小型共同基金投资组合。
- 除银行账户外的所有资产:没有银行账户,但有其他资产。
- 多家银行和UAN:多个银行账户和EPF UAN,部分交易覆盖。
- 无关联资产:只有储蓄账户余额。
- 无信用报告:除信用报告外的所有资产。
测试数据场景
| 电话号码 | 描述 |
|---|---|
| 1111111111 | 无关联资产。仅存在储蓄账户余额 |
| 2222222222 | 所有关联资产(银行账户、EPF、印度股票、美国股票、信用报告)。包含9只基金的大型共同基金投资组合 |
| 3333333333 | 所有相关资产(银行账户、EPF、印度股票、美国股票、信用报告)。只有一只基金的小型共同基金投资组合 |
| 4444444444 | 所有相关资产(银行账户、EPF、印度股票、美国股票)。只有一只基金的小型共同基金投资组合。已连接2个UAN帐户。有3家不同的银行,有多个账户。只有2个银行账户的交易记录 |
| 5555555555 | 除信用评分外的所有相关资产(银行账户、EPF、印度股票、美国股票)。只有一只基金的小型共同基金投资组合。有3家不同的银行,有多个账户。只有2个银行账户的交易记录 |
| 6666666666 | 除银行账户外的所有关联资产(EPF、印度股票、美国股票)。拥有9只基金的大型共同基金投资组合。未连接银行账户 |
| 7777777777 | 债务沉重的低绩效者。一个共同基金表现不佳、负债(信用卡和个人贷款)高的用户。MF回报率低(XIRR<5%)。没有多样化(全部股权,少数基金)。信用评分<650。信用卡使用率高,多次贷款。可忽略的净值或负值。 |
| 8888888888 | SIP武士。每月通过SIP持续投资于多个共同基金。MF中有3-5个活动SIP。中等回报率(XIRR 8-12%)。 |
| 99999999999 | 固定收益狂热者。强烈偏好债务共同基金和定期存款等低风险投资。80%投资于债务型金融机构。偶尔的黄金ETF(可选)。持续但缓慢的净值增长(XIRR~8-10%)。 |
| 1010101010 | 贵金属信徒。对黄金和定期存款的高配置,最低的股权敞口。黄金MF/ETF约占投资的50%。黄金基金中的保守SIP。FD和经常性存款。最低股权敞口。 |
| 1212121212 | 休眠的EPF Earner。有公积金账户,但雇主停止缴费;平衡停滞。EPF余额>₹2 lakh.利息未记入贷方。没有私人投资。 |
| 1414141414 | 工资水槽。用户的工资主要被EMIs和信用卡账单所消耗。每月工资抵免。70%用于EMIs和信用卡费用。低投资或零投资。信用评分~600–650。 |
| 13131313 | 平衡增长跟踪器。投资组合多样化,包括EPF、MF、股票和一些美国敞口。EPF贡献高。股权和混合型中小企业中的SIP。国际MF/ETF 10-20%。健康的净值增长。良好的信用评分(750+)。 |
| 2020202020 | 新手储蓄。最近开始投资,门票规模小,交易少。只有1-2个MF,开始于6个月前。 SIP ₹500–₹1000. 最低银行余额,无债务。 |
| 2121212121 | 双收入发电机。有自由职业+工资收入;现金流不平衡,但投资稳定。工资+来自UPI应用程序的多个学分。MF投资不规则但在增加。银行账户流动性高。信用评分超过700。偶尔的商业贷款或透支。 |
| 2525252525 | 活在当下。收入高,但都花掉了。投资微不足道或不稳定。工资待遇>₹2L/月。食物、购物、旅行支出高。没有SIPs,也许是MF的一次性购买。信用卡欠款经常滚存。信用评分<700,净值低或为零。 |
示例:虚拟数据文件
一个样本 fetch_net_worth.json (为简洁起见截断):
{
"netWorthResponse": {
"assetValues": [
{"netWorthAttribute": "ASSET_TYPE_MUTUAL_FUND", "value": {"currencyCode": "INR", "units": "84642"}},
{"netWorthAttribute": "ASSET_TYPE_EPF", "value": {"currencyCode": "INR", "units": "211111"}}
],
"liabilityValues": [
{"netWorthAttribute": "LIABILITY_TYPE_VEHICLE_LOAN", "value": {"currencyCode": "INR", "units": "5000"}}
],
"totalNetWorthValue": {"currencyCode": "INR", "units": "658305"}
}
}
身份验证流程
- 当调用工具/API时,服务器将检查有效的会话。
- 如果未通过身份验证,系统会提示用户通过网页登录(
/mockWebPage?sessionId=...). - 输入任何允许的电话号码(请参阅中的目录
test_data_dir/).OTP未验证。 - 成功登录后,会话将在服务器运行期间存储在内存中。
运行服务器
先决条件
- 转到1.23或更高版本(安装说明)
安装依赖项
go mod tidy
启动服务器
FI_MCP_PORT=8080 go run .
服务器将于启动 http://localhost:8080.
用法
- 按照此说明进行操作 引导 设置客户端
- 将url替换为本地运行的服务器,例如:
http://localhost:8080/mcp/stream - 当系统提示登录时,使用上述电话号码之一
- Otp/密码可以是网页上的任何东西
简单的curl客户端
curl -X POST -H "Content-Type: application/json" -H "Mcp-Session-Id: mcp-session-594e48ea-fea1-40ef-8c52-7552dd9272af" -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fetch_bank_transactions","arguments":{}}}' http://localhost:8080/mcp/stream
如果你运行一次,你会得到 login_url 作为响应,登录后再次运行它将为您提供数据
简单的fastmcp python客户端
from mcp.client.streamable_http import streamablehttp_client
from mcp.client.session import ClientSession
import asyncio
async def main():
try:
async with streamablehttp_client("http://localhost: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())
要求:
- fastmcp(
pip install mcp)
简单的谷歌广告示例
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams
toolset = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url = "http://localhost:8080/mcp/stream"
)
)
root_agent = LlmAgent(
model='gemini-2.0-flash',
name='fi_mcp',
instruction="You are an agent proficient in financial advises",
tools=[toolset],
)
要求:
- 谷歌广告(>=1.8.0)(
pip install google-adk) export GOOGLE_API_KEY=YOUR_API_KEY- 跑
adk web在父目录中
如果你正在使用 skip_auth 分支,您应该直接获取数据,如图所示
常见问题解答
-
为什么我每次都需要登录ADK?
MCP中的会话是MCP服务器和MCP客户端之间的一对一连接,需要登录一次。如果您的ADK有多个代理,并且您正在为它们创建多个客户端,请确保您维护一个通用的sessionId并传递它。但是,如果您想完全跳过身份验证,尽管我们不建议这样做,因为我们希望您的代理处理生产用例,您可以参考 这 关于如何跳过认证的问题
-
为什么我的会话id无效?
如果在客户端初始化之前创建自定义会话id,请确保在其前缀中添加
mcp-session-例如:3ef38b37-323a-4bbd-acbb-3fe02f97783f无效,并且mcp-session-3ef38b37-323a-4bbd-acbb-3fe02f97783f有效