Skip to main content
Glama
RyanWang945

self-mcp-server

by RyanWang945
README.md
# self-mcp-server

FastMCP server for querying FRED financial and macroeconomic data plus AKShare A-share stock basics.

Design doc:

- [FRED FastMCP Server 设计文档](docs/fred_fastmcp_design.md)
- [MCP Server 部署目录说明](docs/mcp_deployments.md)

## Setup

```powershell
uv sync
$env:FRED_API_KEY = ""
uv run python main.py
```

Alternatively, create a local `.env` file from `.env.example`:

```powershell
Copy-Item .env.example .env
```

Then set `FRED_API_KEY` in `.env`. The server loads it from environment variables via `python-dotenv`; the key is never exposed as a tool parameter.

## Local MCP Loader Demo

This repo also includes a small local MCP loader demo. The config is in
`deployments/mcp.local.yaml` and follows the same simple stdio shape used by
Codex/OpenCode-style MCP configs: server name plus `command`, `args`, `env`,
and optional `env_files`.

The demo loads:

- `fred`: this local FRED MCP server via `.venv/Scripts/python.exe main.py`
- `github`: the local Docker image `docker.xuanyuan.run/mcp/github:latest`

Prepare local secrets:

```powershell
Copy-Item .env.example .env
Copy-Item deployments/github-mcp/.env.example deployments/github-mcp/.env
```

Set `FRED_API_KEY` in `.env` and `GITHUB_PERSONAL_ACCESS_TOKEN` in
`deployments/github-mcp/.env`.

Run the demo:

```powershell
.venv\Scripts\python.exe scripts\demo_load_mcp_servers.py
```

It initializes both MCP servers, lists their tools, and calls one sample tool on
each server.

For HTTP mode, these can also live in `.env`:

```text
MCP_TRANSPORT=http
MCP_HOST=127.0.0.1
MCP_PORT=8765
MCP_PATH=/mcp
MCP_STATELESS_HTTP=true
MCP_JSON_RESPONSE=true
```

HTTP mode for curl-based E2E checks:

```powershell
$env:MCP_TRANSPORT = "http"
$env:MCP_HOST = "127.0.0.1"
$env:MCP_PORT = "8765"
$env:MCP_PATH = "/mcp"
uv run python main.py
```

## Tools

- `fred_search_series`
- `fred_get_series`
- `fred_get_observations`
- `fred_get_latest_observation`
- `fred_get_vintage_dates`
- `fred_get_canonical_indicators`
- `fred_get_macro_snapshot`
- `akshare_stock_zh_a_code_name`
- `akshare_stock_profile_cninfo`
- `akshare_stock_valuation_em`
- `akshare_stock_financial_abstract`
- `akshare_stock_basic_metrics`

All tools return a common envelope:

```json
{
  "ok": true,
  "data": {},
  "meta": {
    "source": "FRED",
    "endpoint": "series/observations",
    "cached": false,
    "fetched_at": "2026-05-13T12:00:00Z"
  },
  "request": {},
  "warnings": []
}
```