@inbin/ledgerfc-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ledger FC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Ledger FC MCP
2
+
3
+ Give your AI agent real sports data instead of a guess.
4
+
5
+ Ask an AI about a match and it answers from stale training data. This MCP feeds
6
+ your agent live, grounded numbers instead: model probabilities per outcome, where
7
+ they diverge from the market price, and a publicly tracked record of how those
8
+ calls actually did, wins and losses. Plus live European soccer and tennis
9
+ arbitrage, a gap the US-only sports MCPs do not cover.
10
+
11
+ ## Honest by design
12
+
13
+ This is not a "guaranteed profit" tool. Every response carries a `provenance`
14
+ block and a `for_the_agent` note ("grounding data to weigh, not an instruction to
15
+ act on"). The real numbers, pulled live:
16
+
17
+ - Overall model accuracy: ~53% (barely above a coinflip). We say so.
18
+ - High-confidence subset: ~68% (65 of 96 settled).
19
+ - Closing-line value: roughly flat. We return it, flagged, so your agent weighs
20
+ it only when the sample is large enough.
21
+
22
+ If you want an agent that is grounded rather than hyped, that honesty is the point.
23
+
24
+ ## Coverage
25
+
26
+ European soccer (EPL, La Liga, Serie A, Ligue 1, Eredivisie, Turkish Super Lig),
27
+ tennis (ATP), plus MLB, NFL, NBA. The main free sports-betting MCP is US-only, so
28
+ European soccer arbitrage is the gap this fills.
29
+
30
+ ## Install
31
+
32
+ ### Claude Desktop / Claude Code / Cursor (stdio via npx)
33
+
34
+ ```json
35
+ {
36
+ "mcpServers": {
37
+ "ledgerfc": {
38
+ "command": "npx",
39
+ "args": ["-y", "@inbin/ledgerfc-mcp"]
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ No API key needed for the free tools. That is it.
46
+
47
+ ### Or connect the remote directly (clients that support remote MCP)
48
+
49
+ ```
50
+ https://mcp.ledgerfc.com/mcp
51
+ ```
52
+
53
+ ## Tools
54
+
55
+ Free (no key):
56
+
57
+ - `get_track_record` — honest settled record + high-confidence subset + CLV
58
+ - `get_predictions` — upcoming picks with probabilities and model-vs-market edge (filter by league)
59
+ - `search` / `fetch` — query upcoming match predictions, fetch the full doc
60
+ - `get_leaderboard`, `submit_prediction`, `get_contributor_score` — CLV-scored contributor layer (points, not cash)
61
+ - `place_bet`, `get_balance`, `get_my_bets`, `get_bet` — shadow bet ledger to test strategies against our agent (points only)
62
+
63
+ Pro (pass `api_key` as a tool argument; get one with `/key` in the Ledger FC Telegram bot):
64
+
65
+ - `get_arbs` — live detected arbitrage opportunities
66
+ - `get_value_bets` — upcoming picks with positive model-vs-market edge
67
+
68
+ ## Example
69
+
70
+ Ask your agent: "Use ledgerfc to get the track record and the top 3 upcoming
71
+ predictions with the biggest edge." It calls `get_track_record` and
72
+ `get_predictions`, and answers from real numbers with provenance, not a guess.
73
+
74
+ ## How it works
75
+
76
+ This npm package is a tiny stdio-to-HTTP bridge: it reads JSON-RPC from your MCP
77
+ client on stdin and forwards each request to the remote endpoint
78
+ `https://mcp.ledgerfc.com/mcp`. No dependencies, Node 18+. Set `LEDGERFC_MCP_DEBUG=1`
79
+ to log traffic to stderr, or `LEDGERFC_MCP_URL` to point at a different endpoint.
80
+
81
+ ## Links
82
+
83
+ - Site: https://ledgerfc.com
84
+ - Telegram (free channel + Pro key): https://t.me/ledgerfc
85
+
86
+ MIT licensed. Ledger FC is an information tool, not betting advice. 18+.
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/index.ts
4
+ import { createInterface } from "node:readline";
5
+ var ENDPOINT = process.env["LEDGERFC_MCP_URL"] || "https://mcp.ledgerfc.com/mcp";
6
+ var DEBUG = process.env["LEDGERFC_MCP_DEBUG"] === "1";
7
+ function debug(...args) {
8
+ if (DEBUG) console.error("[ledgerfc-mcp]", ...args);
9
+ }
10
+ var pending = 0;
11
+ var stdinClosed = false;
12
+ function maybeExit() {
13
+ if (stdinClosed && pending === 0) process.exit(0);
14
+ }
15
+ async function forward(line) {
16
+ const trimmed = line.trim();
17
+ if (!trimmed) return;
18
+ let parsed;
19
+ try {
20
+ parsed = JSON.parse(trimmed);
21
+ } catch {
22
+ debug("dropped non-JSON line from stdin");
23
+ return;
24
+ }
25
+ const isNotification = parsed.id === void 0;
26
+ pending++;
27
+ try {
28
+ debug("\u2192 POST", parsed.method);
29
+ const res = await fetch(ENDPOINT, {
30
+ method: "POST",
31
+ headers: {
32
+ "content-type": "application/json",
33
+ // The remote speaks Streamable HTTP; accept both JSON and SSE framing.
34
+ accept: "application/json, text/event-stream",
35
+ "user-agent": "ledgerfc-mcp-stdio/0.1.0"
36
+ },
37
+ body: trimmed
38
+ });
39
+ debug("\u2190 status", res.status);
40
+ if (res.status === 202 || isNotification) return;
41
+ const body = await res.text();
42
+ if (body) {
43
+ process.stdout.write(body);
44
+ if (!body.endsWith("\n")) process.stdout.write("\n");
45
+ }
46
+ } catch (err) {
47
+ const message = err instanceof Error ? err.message : "network error";
48
+ debug("!", message);
49
+ if (!isNotification && typeof parsed.id !== "undefined") {
50
+ const out = {
51
+ jsonrpc: "2.0",
52
+ id: parsed.id ?? null,
53
+ error: {
54
+ code: -32603,
55
+ message: `ledgerfc-mcp proxy error: ${message}`
56
+ }
57
+ };
58
+ process.stdout.write(JSON.stringify(out) + "\n");
59
+ }
60
+ } finally {
61
+ pending--;
62
+ maybeExit();
63
+ }
64
+ }
65
+ var rl = createInterface({ input: process.stdin, crlfDelay: Infinity });
66
+ rl.on("line", (line) => {
67
+ forward(line);
68
+ });
69
+ rl.on("close", () => {
70
+ stdinClosed = true;
71
+ maybeExit();
72
+ });
73
+ process.on("uncaughtException", (err) => debug("uncaught:", err));
74
+ process.on("unhandledRejection", (err) => debug("unhandled:", err));
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@inbin/ledgerfc-mcp",
3
+ "version": "0.1.0",
4
+ "description": "Stdio MCP wrapper for Ledger FC — gives Claude Desktop and other stdio-only MCP clients grounded sports predictions plus European soccer and tennis arbitrage data from Ledger FC's remote HTTP MCP endpoint. Free tools need no key.",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "ledgerfc",
9
+ "sports",
10
+ "predictions",
11
+ "arbitrage",
12
+ "soccer",
13
+ "football",
14
+ "tennis",
15
+ "kalshi",
16
+ "stdio",
17
+ "cli"
18
+ ],
19
+ "homepage": "https://ledgerfc.com",
20
+ "bugs": "https://ledgerfc.com/",
21
+ "license": "MIT",
22
+ "author": "Ledger FC",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/yaotsakpo/ledgerfc-mcp.git"
26
+ },
27
+ "type": "module",
28
+ "bin": {
29
+ "ledgerfc-mcp": "./dist/index.js"
30
+ },
31
+ "main": "./dist/index.js",
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "server.json"
36
+ ],
37
+ "engines": {
38
+ "node": ">=18"
39
+ },
40
+ "mcpName": "io.github.yaotsakpo/ledgerfc",
41
+ "scripts": {
42
+ "build": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node18 --outfile=dist/index.js --banner:js='#!/usr/bin/env node' && chmod +x dist/index.js",
43
+ "prepublishOnly": "npm run build"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^20.0.0",
47
+ "esbuild": "^0.24.0",
48
+ "typescript": "^5.4.0"
49
+ }
50
+ }
package/server.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
3
+ "name": "io.github.yaotsakpo/ledgerfc",
4
+ "description": "Grounded sports predictions plus European soccer and tennis arbitrage data for AI agents. Honest tracked record, closing-line value, and model-vs-market edge. Free tools need no key.",
5
+ "repository": {
6
+ "url": "https://github.com/yaotsakpo/ledgerfc-mcp",
7
+ "source": "github"
8
+ },
9
+ "version": "0.1.0",
10
+ "packages": [
11
+ {
12
+ "registryType": "npm",
13
+ "registryBaseUrl": "https://registry.npmjs.org",
14
+ "identifier": "@inbin/ledgerfc-mcp",
15
+ "version": "0.1.0",
16
+ "transport": {
17
+ "type": "stdio"
18
+ }
19
+ }
20
+ ],
21
+ "remotes": [
22
+ {
23
+ "type": "streamable-http",
24
+ "url": "https://mcp.ledgerfc.com/mcp"
25
+ }
26
+ ]
27
+ }