金融服务模拟服务器

fi-mcp-dev是一个轻量级的模拟服务器,用于模拟Fi MCP服务器的核心功能,提供虚拟金融数据和简化认证流程,适用于黑客马拉松、演示和开发环境。

  • by magudeshhmw
  • HTML
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Magudeshhmw/fi-mcp-dev

使用说明

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未验证。
  • 成功登录后,会话将在服务器运行期间存储在内存中。

运行服务器

先决条件

安装依赖项

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 有效