tckr 0.1.0__tar.gz
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.
- tckr-0.1.0/CHANGELOG.md +71 -0
- tckr-0.1.0/LICENSE +21 -0
- tckr-0.1.0/MANIFEST.in +8 -0
- tckr-0.1.0/PKG-INFO +193 -0
- tckr-0.1.0/README.md +144 -0
- tckr-0.1.0/pyproject.toml +97 -0
- tckr-0.1.0/setup.cfg +4 -0
- tckr-0.1.0/tckr/__init__.py +54 -0
- tckr-0.1.0/tckr/__main__.py +6 -0
- tckr-0.1.0/tckr/_http.py +83 -0
- tckr-0.1.0/tckr/agent_toolkit/__init__.py +39 -0
- tckr-0.1.0/tckr/agent_toolkit/adapters/__init__.py +7 -0
- tckr-0.1.0/tckr/agent_toolkit/adapters/claude_sdk.py +88 -0
- tckr-0.1.0/tckr/agent_toolkit/adapters/langchain.py +89 -0
- tckr-0.1.0/tckr/agent_toolkit/adapters/mcp_stdio.py +92 -0
- tckr-0.1.0/tckr/agent_toolkit/adapters/openai.py +118 -0
- tckr-0.1.0/tckr/agent_toolkit/core.py +1169 -0
- tckr-0.1.0/tckr/alchemy.py +258 -0
- tckr-0.1.0/tckr/birdeye.py +287 -0
- tckr-0.1.0/tckr/cache.py +49 -0
- tckr-0.1.0/tckr/clanker.py +317 -0
- tckr-0.1.0/tckr/cli.py +259 -0
- tckr-0.1.0/tckr/coinalyze.py +425 -0
- tckr-0.1.0/tckr/coingecko.py +225 -0
- tckr-0.1.0/tckr/defillama.py +363 -0
- tckr-0.1.0/tckr/dexscreener.py +255 -0
- tckr-0.1.0/tckr/etherscan.py +233 -0
- tckr-0.1.0/tckr/geckoterminal.py +253 -0
- tckr-0.1.0/tckr/goplus.py +365 -0
- tckr-0.1.0/tckr/helius.py +342 -0
- tckr-0.1.0/tckr/honeypot.py +119 -0
- tckr-0.1.0/tckr/hyperliquid.py +196 -0
- tckr-0.1.0/tckr/jito.py +332 -0
- tckr-0.1.0/tckr/lp_lock.py +678 -0
- tckr-0.1.0/tckr/lunarcrush.py +103 -0
- tckr-0.1.0/tckr/messari.py +109 -0
- tckr-0.1.0/tckr/neynar.py +412 -0
- tckr-0.1.0/tckr/polymarket.py +160 -0
- tckr-0.1.0/tckr/pumpfun.py +790 -0
- tckr-0.1.0/tckr/pyth.py +162 -0
- tckr-0.1.0/tckr/registry.py +361 -0
- tckr-0.1.0/tckr/settings.py +163 -0
- tckr-0.1.0/tckr/solscan.py +139 -0
- tckr-0.1.0/tckr/thegraph.py +128 -0
- tckr-0.1.0/tckr/tokenterminal.py +112 -0
- tckr-0.1.0/tckr/virtuals.py +256 -0
- tckr-0.1.0/tckr/wallet_pnl.py +467 -0
- tckr-0.1.0/tckr.egg-info/PKG-INFO +193 -0
- tckr-0.1.0/tckr.egg-info/SOURCES.txt +51 -0
- tckr-0.1.0/tckr.egg-info/dependency_links.txt +1 -0
- tckr-0.1.0/tckr.egg-info/entry_points.txt +3 -0
- tckr-0.1.0/tckr.egg-info/requires.txt +28 -0
- tckr-0.1.0/tckr.egg-info/top_level.txt +1 -0
tckr-0.1.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `tckr` are documented here. Format roughly follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
|
+
[SemVer](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Capability / tier registry (`tckr.registry`): per-module tier
|
|
11
|
+
(`keyless-free` / `keyed-free` / `keyed-paid`), required env vars, and an
|
|
12
|
+
`is_configured()` check. Drives MCP tool descriptions, CLI status, and the
|
|
13
|
+
`capabilities` introspection tool.
|
|
14
|
+
- Agent toolkit (`tckr.agent_toolkit`) — extracted from the
|
|
15
|
+
Market-Research-Comp sibling project and refactored into a platform-neutral
|
|
16
|
+
core + per-platform adapters:
|
|
17
|
+
- `agent_toolkit.core` — 20+ tool functions and `ToolSpec` registry; no SDK deps.
|
|
18
|
+
- `adapters/claude_sdk` — Claude Agent SDK in-process MCP server (`tckr[agent-claude]`).
|
|
19
|
+
- `adapters/mcp_stdio` — universal MCP stdio server, console-script `tckr-mcp`
|
|
20
|
+
(`tckr[agent-mcp]`). Works with any MCP-compatible client.
|
|
21
|
+
- `adapters/openai` — OpenAI function-calling shape (`tckr[agent-openai]`).
|
|
22
|
+
- `adapters/langchain` — LangChain `StructuredTool` wrappers (`tckr[agent-langchain]`).
|
|
23
|
+
|
|
24
|
+
## [0.1.0] — 2026-05-24
|
|
25
|
+
|
|
26
|
+
First tagged release. Inventory of what shipped during the build-up
|
|
27
|
+
(2026-05-22 through 2026-05-24):
|
|
28
|
+
|
|
29
|
+
### Added — data-source modules
|
|
30
|
+
|
|
31
|
+
- `geckoterminal` — DEX pools, tokens by contract, OHLCV (Base / Solana / ETH). Keyless.
|
|
32
|
+
- `dexscreener` — DEX pairs, search, latest token profiles, paid-boost rankings. Keyless.
|
|
33
|
+
- `hyperliquid` — single-exchange perps: funding, OI, marks. Keyless.
|
|
34
|
+
- `defillama` — chain/protocol TVL, DEX volume, stablecoins, yields. Keyless.
|
|
35
|
+
- `coinalyze` — cross-exchange perps aggregator (funding spread, OI, liquidations
|
|
36
|
+
across Binance / Bybit / OKX / Hyperliquid). Requires `COINALYZE_API_KEY` (free).
|
|
37
|
+
- `goplus` — EVM token contract security scans (honeypot detection, taxes, owner
|
|
38
|
+
privileges, holder distribution). Keyless.
|
|
39
|
+
- `honeypot` — sell-simulation backstop on ETH / BSC / Base. Keyless.
|
|
40
|
+
- `birdeye` — Solana-focused token analytics (overview, top holders, security).
|
|
41
|
+
Requires `BIRDEYE_API_KEY` (free tier).
|
|
42
|
+
- `pumpfun` — Solana memecoin launchpad. Discovery (new / about-to-bond /
|
|
43
|
+
graduated) via Moralis or Bitquery; on-chain bonding-curve state via Helius.
|
|
44
|
+
Adds Bitquery-exclusive analytics (top_traders, live_trades, migration_events,
|
|
45
|
+
curve_trajectory, holder_distribution). Requires `MORALIS_API_KEY` or
|
|
46
|
+
`BITQUERY_API_KEY` for discovery; `HELIUS_API_KEY` for state.
|
|
47
|
+
- `neynar` — Farcaster API (cast search, channel feeds, trending fungibles).
|
|
48
|
+
Requires `NEYNAR_API_KEY`; most endpoints require paid tier as of 2026-05.
|
|
49
|
+
- `wallet_pnl` — FIFO PnL across Solana + Base wallets. Auto-resolves ATA →
|
|
50
|
+
owner. Per-token realized + unrealized USD; filters wSOL/WETH/stables.
|
|
51
|
+
Composite — reuses Helius / Alchemy / Moralis / Birdeye keys.
|
|
52
|
+
- `lp_lock` — LP-lock detection for Uniswap V2 pairs, V3 positions, V4 positions
|
|
53
|
+
on Base / ETH. Auto-detects pool type from input shape. Covers UNCX V2/V3/V4
|
|
54
|
+
and Team Finance ETH lockers. Requires `ALCHEMY_API_KEY` (free).
|
|
55
|
+
- `virtuals` — Virtuals Protocol AI-agent launchpad on Base. Tracks the
|
|
56
|
+
42K-VIRTUAL bonding-curve graduation threshold. Keyless.
|
|
57
|
+
- `clanker` — Clanker Farcaster-native token launcher (Base, multi-chain).
|
|
58
|
+
Carries `requestor_fid` for direct cross-link with `neynar`. Keyless.
|
|
59
|
+
- `jito` — Solana MEV intel. `tip_floor`, `bundle_status`, and the headline
|
|
60
|
+
`snipe_score(sigs)` — feeds e.g. `pumpfun.live_trades` signatures to quantify
|
|
61
|
+
bot-sniping intensity on a launch. Uses `HELIUS_API_KEY`.
|
|
62
|
+
- `alchemy` — EVM (Base, ETH) wallet balances + transfers. Requires `ALCHEMY_API_KEY`.
|
|
63
|
+
- `helius` — Solana RPC convenience layer. Requires `HELIUS_API_KEY`.
|
|
64
|
+
|
|
65
|
+
### Added — infrastructure
|
|
66
|
+
|
|
67
|
+
- `_http` — shared httpx-based fetch helper with retry on 429/5xx.
|
|
68
|
+
- `cache` — async TTL cache, instantiated per-module.
|
|
69
|
+
- `settings` — env-driven config (API keys + per-source TTLs), no other deps.
|
|
70
|
+
- `cli` — `tckr <subcommand>` for ad-hoc queries (dex / token / perps /
|
|
71
|
+
tvl / wallet).
|
tckr-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tckr contributors
|
|
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.
|
tckr-0.1.0/MANIFEST.in
ADDED
tckr-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tckr
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Async, cached, gracefully-degrading aggregator over the major free crypto data APIs (DEX, perps, TVL, on-chain, social, launchpads, MEV) — plus an agent toolkit that exposes the data to any LLM platform via MCP, the Claude Agent SDK, OpenAI function calling, or LangChain.
|
|
5
|
+
Author: tckr contributors
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/tckr-org/tckr
|
|
8
|
+
Project-URL: Repository, https://github.com/tckr-org/tckr
|
|
9
|
+
Project-URL: Issues, https://github.com/tckr-org/tckr/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/tckr-org/tckr/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: crypto,defi,dex,perps,tvl,solana,base,ethereum,hyperliquid,geckoterminal,dexscreener,defillama,coinalyze,agent,mcp,llm,claude,openai,langchain
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Framework :: AsyncIO
|
|
23
|
+
Classifier: Typing :: Typed
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: httpx>=0.27
|
|
28
|
+
Requires-Dist: solders>=0.21
|
|
29
|
+
Requires-Dist: eth-abi>=5.0
|
|
30
|
+
Requires-Dist: eth-hash[pycryptodome]>=0.7
|
|
31
|
+
Provides-Extra: agent-claude
|
|
32
|
+
Requires-Dist: claude-agent-sdk>=0.1; extra == "agent-claude"
|
|
33
|
+
Provides-Extra: agent-mcp
|
|
34
|
+
Requires-Dist: mcp>=1.0; extra == "agent-mcp"
|
|
35
|
+
Provides-Extra: agent-openai
|
|
36
|
+
Requires-Dist: openai>=1.40; extra == "agent-openai"
|
|
37
|
+
Provides-Extra: agent-langchain
|
|
38
|
+
Requires-Dist: langchain-core>=0.3; extra == "agent-langchain"
|
|
39
|
+
Provides-Extra: agent
|
|
40
|
+
Requires-Dist: tckr[agent-claude,agent-mcp]; extra == "agent"
|
|
41
|
+
Provides-Extra: agent-all
|
|
42
|
+
Requires-Dist: tckr[agent-claude,agent-langchain,agent-mcp,agent-openai]; extra == "agent-all"
|
|
43
|
+
Provides-Extra: dev
|
|
44
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
45
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
46
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
47
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
48
|
+
Dynamic: license-file
|
|
49
|
+
|
|
50
|
+
# tckr
|
|
51
|
+
|
|
52
|
+
A reusable async crypto data layer. Stitches together free (and free-tier) public
|
|
53
|
+
APIs into one clean, cached, typed interface — built to be `pip install -e`'d
|
|
54
|
+
into multiple local projects rather than copy-pasted between them.
|
|
55
|
+
|
|
56
|
+
Every call is async, cached per-source (TTL), and degrades gracefully — a dead
|
|
57
|
+
or rate-limited upstream returns `None` / `[]` rather than raising. Modules that
|
|
58
|
+
need an API key log a warning and return empty when the key is absent rather
|
|
59
|
+
than crashing the caller.
|
|
60
|
+
|
|
61
|
+
## Sources
|
|
62
|
+
|
|
63
|
+
| Module | Source | Key? | Provides |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `geckoterminal` | GeckoTerminal API v2 | no | DEX pools, tokens by contract address, OHLCV (Base, Solana, ETH, …) |
|
|
66
|
+
| `dexscreener` | Dexscreener API | no | DEX pairs, search, latest token profiles, paid-boost rankings |
|
|
67
|
+
| `hyperliquid` | Hyperliquid API | no | Single-exchange perps: funding, open interest, marks |
|
|
68
|
+
| `coinalyze` | Coinalyze API | free key | Cross-exchange perps: funding spread, OI, liquidations across Binance/Bybit/OKX/Hyperliquid/etc |
|
|
69
|
+
| `defillama` | DefiLlama API | no | Chain/protocol TVL, DEX volume, stablecoins, yields |
|
|
70
|
+
| `goplus` | GoPlus Security API | no | EVM token contract security scans (honeypot detection, taxes, owner privileges, holder dist) |
|
|
71
|
+
| `honeypot` | honeypot.is API | no | EVM sell-simulation backstop (ETH / BSC / Base) — actually attempts a swap to verify exit |
|
|
72
|
+
| `birdeye` | Birdeye public API | free key | Solana-focused token analytics: overview, top holders, trader PnL, security |
|
|
73
|
+
| `pumpfun` | Moralis / Bitquery (discovery + analytics) + Helius (state) | free key(s) | Solana memecoin launchpad. Discovery: new / about-to-bond / graduated lists. On-chain: bonding-curve state via SPL balance. Bitquery-exclusive analytics: top_traders, live_trades, migration_events, curve_trajectory, holder_distribution. |
|
|
74
|
+
| `neynar` | Neynar (Farcaster) | paid for most | Cast search, channel feeds, trending casts + fungibles, KOL helpers. 8 functions wired; only `user_by_username` works on free tier as of May 2026 — others return 402 until upgrade (degrade gracefully). |
|
|
75
|
+
| `wallet_pnl` | Helius (Solana) + Moralis (Base) + birdeye (prices) | uses existing keys | FIFO PnL across Sol+Base wallets. Auto-resolves ATA → owner. Per-token realized + unrealized USD. Filters wSOL/WETH/stables as counter assets by default. |
|
|
76
|
+
| `lp_lock` | Alchemy (EVM) | uses existing key | LP-lock detection for Uniswap V2 pairs, V3 positions, and V4 positions on Base / ETH. Auto-detects from input shape (40-hex-char address vs 64-hex-char PoolId). V2 returns `locked_pct`; V3/V4 return `n_locked_positions` + per-position detail. Covers UNCX V2, V3, V4 lockers; Team Finance on ETH. Team Finance Base + per-lock unlock_at are TODOs. |
|
|
77
|
+
| `virtuals` | api.virtuals.io | no key | Virtuals Protocol AI-agent launchpad on Base. `new_tokens` / `about_to_graduate` / `recently_graduated` / `genesis_launches` / `token_info`. Tracks the 42K-VIRTUAL bonding-curve graduation threshold. |
|
|
78
|
+
| `clanker` | clanker.world/api | no key | Clanker Farcaster-native token launcher (Base + multi-chain). `new_tokens` / `trending_tokens` / `tokens_by_fid` / `tokens_by_deployer` / `holders` / `token_info`. Carries `requestor_fid` for direct cross-link with [[neynar]]. |
|
|
79
|
+
| `jito` | block-engine.jito.wtf + Helius | uses HELIUS_API_KEY | Solana MEV intel. `tip_floor()`, `tip_accounts()`, `bundle_status()`, `inflight_bundle_status()`, `tx_jito_info(sig)`, `snipe_score(sigs)`. Killer use case: feed `pumpfun.live_trades` signatures into `snipe_score` to quantify how heavily a launch was bot-sniped. |
|
|
80
|
+
| `alchemy` | Alchemy RPC | free key | EVM (Base, ETH) on-chain wallet balances + transfers |
|
|
81
|
+
| `helius` | Helius RPC | free key | Solana RPC convenience layer (balances, transfers) |
|
|
82
|
+
| `coingecko` | CoinGecko v3 | no key (rate-limited) / free demo key / paid Pro | Canonical spot / market / historical prices; `simple_price`, `coin_markets`, `coin`, `market_chart`, `search`, `trending`, `global_stats`, `categories`. |
|
|
83
|
+
| `polymarket` | Polymarket Gamma API | no | Prediction-market odds (binary YES/NO). `markets`, `top_volume`, `market`, `events`. |
|
|
84
|
+
| `pyth` | Pyth Hermes | no | On-chain oracle prices for ~400 feeds (crypto, equities, FX, metals, rates). `feeds`, `latest_price`, `latest_price_for_symbols`. Sub-second cadence. |
|
|
85
|
+
| `etherscan` | Etherscan V2 | free key | Unified EVM block explorer across ~70 chains (ETH=1, Base=8453, Arb, Op, Polygon, BNB, ...). `balance`, `token_transfers`, `contract_source`, `contract_abi`, `gas_oracle`, `eth_supply`. Backwards-compat with `BASESCAN_API_KEY`. |
|
|
86
|
+
| `solscan` | Solscan | no (public) / free key (Pro) | Solana block explorer. Public endpoints (`token_meta`, `account_info`, `account_tokens`, `token_holders`, `tx_detail`) work keyless; `SOLSCAN_API_KEY` upgrades to Pro for richer parsing + higher RL. |
|
|
87
|
+
| `lunarcrush` | LunarCrush API4 | free key | Social-sentiment scoring: Galaxy Score, AltRank, social volume, topic feeds. `coins_list`, `coin`, `coin_time_series`, `topic`, `topics_list`. Free tier ~100 req/day. |
|
|
88
|
+
| `messari` | Messari API v1/v2 | paid (mostly) | Research-grade asset profiles, metrics, news. `asset`, `asset_metrics`, `asset_profile`, `news_feed`, `assets`. Most endpoints moved behind paid plans in 2024-2025. |
|
|
89
|
+
| `tokenterminal` | Token Terminal API v2 | paid (mostly) | Protocol fundamentals: revenue, fees, P/E, treasury. `projects`, `project`, `project_metrics`, `metric_history`, `market_sectors`. Free tier exposes catalog; historical series are paid. |
|
|
90
|
+
| `thegraph` | The Graph | no (public gateway, throttled) / free key (decentralized) | Generic GraphQL access to indexed subgraphs (Uniswap, Aave, Compound, Lido, etc.). `query_subgraph(id, query, vars)`, `uniswap_v3_top_pools`. |
|
|
91
|
+
|
|
92
|
+
## Install
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
pip install -e path/to/tckr
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Usage
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
import asyncio
|
|
102
|
+
from tckr import geckoterminal, coinalyze
|
|
103
|
+
|
|
104
|
+
async def main():
|
|
105
|
+
pools = await geckoterminal.trending_pools("base", limit=5)
|
|
106
|
+
for p in pools:
|
|
107
|
+
print(p["name"], p["price_usd"], p["volume_24h_usd"])
|
|
108
|
+
|
|
109
|
+
# Cross-exchange funding spread for one coin — the killer Coinalyze use case
|
|
110
|
+
agg = await coinalyze.funding_aggregate("BTC")
|
|
111
|
+
if agg:
|
|
112
|
+
a = agg["aggregate"]
|
|
113
|
+
print(f"BTC funding APR — min {a['min_apr_pct']:.1f}% "
|
|
114
|
+
f"max {a['max_apr_pct']:.1f}% spread {a['spread_apr_pct']:.1f}%")
|
|
115
|
+
|
|
116
|
+
asyncio.run(main())
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Configuration
|
|
120
|
+
|
|
121
|
+
All env vars are optional — modules without keys still work; modules with keys
|
|
122
|
+
no-op until set. See `tckr/settings.py` for the full list.
|
|
123
|
+
|
|
124
|
+
API keys (only needed for the modules that declare them in the table above):
|
|
125
|
+
|
|
126
|
+
- `COINALYZE_API_KEY` — free signup at coinalyze.net (no card).
|
|
127
|
+
- `BIRDEYE_API_KEY` — free tier at birdeye.so (~30 req/min on the endpoints used here).
|
|
128
|
+
- `MORALIS_API_KEY` — free tier at moralis.com; primary source for `pumpfun` discovery (`new_tokens`, `about_to_bond`, `recently_graduated`).
|
|
129
|
+
- `BITQUERY_API_KEY` — free tier at bitquery.io; fallback for `pumpfun.new_tokens` (Bitquery has the richest Pump.fun-specific schema). Either Moralis or Bitquery alone gets you working discovery. On-chain `bonding_state` only needs `HELIUS_API_KEY`. Also unlocks the 5 Bitquery-exclusive analytics functions (top_traders, live_trades, migration_events, curve_trajectory, holder_distribution).
|
|
130
|
+
- `NEYNAR_API_KEY` — free signup at dev.neynar.com. As of May 2026 the free tier only includes `user_by_username` — `search_casts`, `channel_feed`, `trending_fungibles` and the other 5 require a paid plan.
|
|
131
|
+
- `ALCHEMY_API_KEY` — free tier covers Base + ETH at app.alchemy.com.
|
|
132
|
+
- `HELIUS_API_KEY` — free tier at helius.dev.
|
|
133
|
+
- `BASESCAN_API_KEY` — currently declared but not consumed by any shipped module; reserved for the planned etherscan/basescan module.
|
|
134
|
+
- `COINGECKO_API_KEY` — CoinGecko Pro plan (paid). Uses `pro-api.coingecko.com` and unlocks Pro-only endpoints + 500 req/min+.
|
|
135
|
+
- `COINGECKO_DEMO_API_KEY` — CoinGecko Demo plan (free signup). Same public endpoints with a slightly higher rate-limit than no-key.
|
|
136
|
+
- `ETHERSCAN_API_KEY` — Etherscan V2 (free signup at etherscan.io). One key works across all V2-supported chains via the `chainid` parameter (ETH, Base, Arbitrum, Optimism, Polygon, BNB, Avalanche, zkSync, ...). The legacy `BASESCAN_API_KEY` env is also accepted as a fallback.
|
|
137
|
+
- `SOLSCAN_API_KEY` — Solscan Pro (paid). Public endpoints work without it.
|
|
138
|
+
- `LUNARCRUSH_API_KEY` — required for any LunarCrush call. Free signup at lunarcrush.com (~100 req/day on free tier).
|
|
139
|
+
- `MESSARI_API_KEY` — Messari. Free 'Hobbyist' tier limited to ~20 req/min on a small subset; most useful endpoints are paid (Pro / Enterprise).
|
|
140
|
+
- `TOKENTERMINAL_API_KEY` — Token Terminal. Free tier covers project catalog + limited metrics; full historical series + most metrics are paid.
|
|
141
|
+
- `THEGRAPH_API_KEY` — optional. Without it the public gateway is used (heavily throttled); with it the decentralized network gateway gives much higher quota.
|
|
142
|
+
|
|
143
|
+
Cache TTLs (override only if you know why):
|
|
144
|
+
|
|
145
|
+
- `TCKR_DEX_TTL_S`, `TCKR_DEX_OHLCV_TTL_S`, `TCKR_PERPS_TTL_S`,
|
|
146
|
+
`TCKR_TVL_TTL_S`, `TCKR_ONCHAIN_TTL_S`, `TCKR_FUNDING_AGG_TTL_S`,
|
|
147
|
+
`TCKR_LIQUIDATION_TTL_S`, `TCKR_SECURITY_TTL_S`,
|
|
148
|
+
`TCKR_HONEYPOT_TTL_S`, `TCKR_BIRDEYE_TTL_S`, `TCKR_TOKEN_METADATA_TTL_S`,
|
|
149
|
+
`TCKR_COINGECKO_TTL_S` (default 30), `TCKR_COINGECKO_HISTORY_TTL_S` (default 600),
|
|
150
|
+
`TCKR_POLYMARKET_TTL_S` (default 30),
|
|
151
|
+
`TCKR_PYTH_PRICE_TTL_S` (default 10), `TCKR_PYTH_CATALOG_TTL_S` (default 3600),
|
|
152
|
+
`TCKR_ETHERSCAN_TTL_S` (default 30), `TCKR_ETHERSCAN_CONTRACT_TTL_S` (default 86400),
|
|
153
|
+
`TCKR_ETHERSCAN_GAS_TTL_S` (default 15), `TCKR_ETHERSCAN_STATS_TTL_S` (default 600),
|
|
154
|
+
`TCKR_SOLSCAN_TTL_S` (default 60),
|
|
155
|
+
`TCKR_LUNARCRUSH_TTL_S` (default 120),
|
|
156
|
+
`TCKR_MESSARI_TTL_S` (default 300),
|
|
157
|
+
`TCKR_TOKENTERMINAL_TTL_S` (default 300), `TCKR_TOKENTERMINAL_HISTORY_TTL_S` (default 3600),
|
|
158
|
+
`TCKR_THEGRAPH_TTL_S` (default 60).
|
|
159
|
+
|
|
160
|
+
HTTP behavior:
|
|
161
|
+
|
|
162
|
+
- `TCKR_HTTP_TIMEOUT_S` (default 15.0), `TCKR_HTTP_MAX_RETRIES` (default 2).
|
|
163
|
+
|
|
164
|
+
## New-pair / early-stage strategies (Sol + Base)
|
|
165
|
+
|
|
166
|
+
The thesis: the highest-asymmetry crypto trades are early entries on new
|
|
167
|
+
tokens that grow. The full toolkit for that is now shipped — `pumpfun` and
|
|
168
|
+
`virtuals` / `clanker` cover discovery on each chain's dominant launchpad;
|
|
169
|
+
`bonding_state` + `lp_lock` cover safety; `wallet_pnl` covers smart-money
|
|
170
|
+
tracking; `jito` quantifies bot-sniping intensity; `neynar` adds the
|
|
171
|
+
Farcaster social signal on Base. The modules compose:
|
|
172
|
+
|
|
173
|
+
- `pumpfun.live_trades(mint)` signatures → `jito.snipe_score(sigs)` →
|
|
174
|
+
"how bot-sniped is this launch?"
|
|
175
|
+
- `clanker.new_tokens()` `requestor_fid` → `neynar.user_popular_casts(fid)` →
|
|
176
|
+
"what is this deployer saying about their token?"
|
|
177
|
+
- `clanker.new_tokens()` `pool_address` (V4 PoolId) → `lp_lock(pool_id)` →
|
|
178
|
+
"is this Clanker token's LP locked?"
|
|
179
|
+
- `pumpfun.top_traders(mint)` wallets → `wallet_pnl(wallet)` → "is the top
|
|
180
|
+
buyer of this token actually profitable across their other trades?"
|
|
181
|
+
|
|
182
|
+
Future open items (no fixed timeline): per-lock `unlock_at` decoding for
|
|
183
|
+
UNCX V2/V3/V4, Team Finance Base address, V3/V4 USD-value-of-locked-liquidity
|
|
184
|
+
(needs tick math), neynar paid-tier endpoints when budgeted.
|
|
185
|
+
|
|
186
|
+
## Consumers
|
|
187
|
+
|
|
188
|
+
`tckr` is currently consumed by:
|
|
189
|
+
|
|
190
|
+
- **Market-Research-Comp** (sibling repo) — uses the fundamental-trading subset
|
|
191
|
+
(`geckoterminal`, `dexscreener` basics, `hyperliquid`, `coinalyze`, `defillama`).
|
|
192
|
+
Contract-safety + Solana-analytics modules ship in the library but are not
|
|
193
|
+
exposed to those agents — reserved for the future new-pair app sketched above.
|
tckr-0.1.0/README.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# tckr
|
|
2
|
+
|
|
3
|
+
A reusable async crypto data layer. Stitches together free (and free-tier) public
|
|
4
|
+
APIs into one clean, cached, typed interface — built to be `pip install -e`'d
|
|
5
|
+
into multiple local projects rather than copy-pasted between them.
|
|
6
|
+
|
|
7
|
+
Every call is async, cached per-source (TTL), and degrades gracefully — a dead
|
|
8
|
+
or rate-limited upstream returns `None` / `[]` rather than raising. Modules that
|
|
9
|
+
need an API key log a warning and return empty when the key is absent rather
|
|
10
|
+
than crashing the caller.
|
|
11
|
+
|
|
12
|
+
## Sources
|
|
13
|
+
|
|
14
|
+
| Module | Source | Key? | Provides |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `geckoterminal` | GeckoTerminal API v2 | no | DEX pools, tokens by contract address, OHLCV (Base, Solana, ETH, …) |
|
|
17
|
+
| `dexscreener` | Dexscreener API | no | DEX pairs, search, latest token profiles, paid-boost rankings |
|
|
18
|
+
| `hyperliquid` | Hyperliquid API | no | Single-exchange perps: funding, open interest, marks |
|
|
19
|
+
| `coinalyze` | Coinalyze API | free key | Cross-exchange perps: funding spread, OI, liquidations across Binance/Bybit/OKX/Hyperliquid/etc |
|
|
20
|
+
| `defillama` | DefiLlama API | no | Chain/protocol TVL, DEX volume, stablecoins, yields |
|
|
21
|
+
| `goplus` | GoPlus Security API | no | EVM token contract security scans (honeypot detection, taxes, owner privileges, holder dist) |
|
|
22
|
+
| `honeypot` | honeypot.is API | no | EVM sell-simulation backstop (ETH / BSC / Base) — actually attempts a swap to verify exit |
|
|
23
|
+
| `birdeye` | Birdeye public API | free key | Solana-focused token analytics: overview, top holders, trader PnL, security |
|
|
24
|
+
| `pumpfun` | Moralis / Bitquery (discovery + analytics) + Helius (state) | free key(s) | Solana memecoin launchpad. Discovery: new / about-to-bond / graduated lists. On-chain: bonding-curve state via SPL balance. Bitquery-exclusive analytics: top_traders, live_trades, migration_events, curve_trajectory, holder_distribution. |
|
|
25
|
+
| `neynar` | Neynar (Farcaster) | paid for most | Cast search, channel feeds, trending casts + fungibles, KOL helpers. 8 functions wired; only `user_by_username` works on free tier as of May 2026 — others return 402 until upgrade (degrade gracefully). |
|
|
26
|
+
| `wallet_pnl` | Helius (Solana) + Moralis (Base) + birdeye (prices) | uses existing keys | FIFO PnL across Sol+Base wallets. Auto-resolves ATA → owner. Per-token realized + unrealized USD. Filters wSOL/WETH/stables as counter assets by default. |
|
|
27
|
+
| `lp_lock` | Alchemy (EVM) | uses existing key | LP-lock detection for Uniswap V2 pairs, V3 positions, and V4 positions on Base / ETH. Auto-detects from input shape (40-hex-char address vs 64-hex-char PoolId). V2 returns `locked_pct`; V3/V4 return `n_locked_positions` + per-position detail. Covers UNCX V2, V3, V4 lockers; Team Finance on ETH. Team Finance Base + per-lock unlock_at are TODOs. |
|
|
28
|
+
| `virtuals` | api.virtuals.io | no key | Virtuals Protocol AI-agent launchpad on Base. `new_tokens` / `about_to_graduate` / `recently_graduated` / `genesis_launches` / `token_info`. Tracks the 42K-VIRTUAL bonding-curve graduation threshold. |
|
|
29
|
+
| `clanker` | clanker.world/api | no key | Clanker Farcaster-native token launcher (Base + multi-chain). `new_tokens` / `trending_tokens` / `tokens_by_fid` / `tokens_by_deployer` / `holders` / `token_info`. Carries `requestor_fid` for direct cross-link with [[neynar]]. |
|
|
30
|
+
| `jito` | block-engine.jito.wtf + Helius | uses HELIUS_API_KEY | Solana MEV intel. `tip_floor()`, `tip_accounts()`, `bundle_status()`, `inflight_bundle_status()`, `tx_jito_info(sig)`, `snipe_score(sigs)`. Killer use case: feed `pumpfun.live_trades` signatures into `snipe_score` to quantify how heavily a launch was bot-sniped. |
|
|
31
|
+
| `alchemy` | Alchemy RPC | free key | EVM (Base, ETH) on-chain wallet balances + transfers |
|
|
32
|
+
| `helius` | Helius RPC | free key | Solana RPC convenience layer (balances, transfers) |
|
|
33
|
+
| `coingecko` | CoinGecko v3 | no key (rate-limited) / free demo key / paid Pro | Canonical spot / market / historical prices; `simple_price`, `coin_markets`, `coin`, `market_chart`, `search`, `trending`, `global_stats`, `categories`. |
|
|
34
|
+
| `polymarket` | Polymarket Gamma API | no | Prediction-market odds (binary YES/NO). `markets`, `top_volume`, `market`, `events`. |
|
|
35
|
+
| `pyth` | Pyth Hermes | no | On-chain oracle prices for ~400 feeds (crypto, equities, FX, metals, rates). `feeds`, `latest_price`, `latest_price_for_symbols`. Sub-second cadence. |
|
|
36
|
+
| `etherscan` | Etherscan V2 | free key | Unified EVM block explorer across ~70 chains (ETH=1, Base=8453, Arb, Op, Polygon, BNB, ...). `balance`, `token_transfers`, `contract_source`, `contract_abi`, `gas_oracle`, `eth_supply`. Backwards-compat with `BASESCAN_API_KEY`. |
|
|
37
|
+
| `solscan` | Solscan | no (public) / free key (Pro) | Solana block explorer. Public endpoints (`token_meta`, `account_info`, `account_tokens`, `token_holders`, `tx_detail`) work keyless; `SOLSCAN_API_KEY` upgrades to Pro for richer parsing + higher RL. |
|
|
38
|
+
| `lunarcrush` | LunarCrush API4 | free key | Social-sentiment scoring: Galaxy Score, AltRank, social volume, topic feeds. `coins_list`, `coin`, `coin_time_series`, `topic`, `topics_list`. Free tier ~100 req/day. |
|
|
39
|
+
| `messari` | Messari API v1/v2 | paid (mostly) | Research-grade asset profiles, metrics, news. `asset`, `asset_metrics`, `asset_profile`, `news_feed`, `assets`. Most endpoints moved behind paid plans in 2024-2025. |
|
|
40
|
+
| `tokenterminal` | Token Terminal API v2 | paid (mostly) | Protocol fundamentals: revenue, fees, P/E, treasury. `projects`, `project`, `project_metrics`, `metric_history`, `market_sectors`. Free tier exposes catalog; historical series are paid. |
|
|
41
|
+
| `thegraph` | The Graph | no (public gateway, throttled) / free key (decentralized) | Generic GraphQL access to indexed subgraphs (Uniswap, Aave, Compound, Lido, etc.). `query_subgraph(id, query, vars)`, `uniswap_v3_top_pools`. |
|
|
42
|
+
|
|
43
|
+
## Install
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
pip install -e path/to/tckr
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Usage
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
import asyncio
|
|
53
|
+
from tckr import geckoterminal, coinalyze
|
|
54
|
+
|
|
55
|
+
async def main():
|
|
56
|
+
pools = await geckoterminal.trending_pools("base", limit=5)
|
|
57
|
+
for p in pools:
|
|
58
|
+
print(p["name"], p["price_usd"], p["volume_24h_usd"])
|
|
59
|
+
|
|
60
|
+
# Cross-exchange funding spread for one coin — the killer Coinalyze use case
|
|
61
|
+
agg = await coinalyze.funding_aggregate("BTC")
|
|
62
|
+
if agg:
|
|
63
|
+
a = agg["aggregate"]
|
|
64
|
+
print(f"BTC funding APR — min {a['min_apr_pct']:.1f}% "
|
|
65
|
+
f"max {a['max_apr_pct']:.1f}% spread {a['spread_apr_pct']:.1f}%")
|
|
66
|
+
|
|
67
|
+
asyncio.run(main())
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Configuration
|
|
71
|
+
|
|
72
|
+
All env vars are optional — modules without keys still work; modules with keys
|
|
73
|
+
no-op until set. See `tckr/settings.py` for the full list.
|
|
74
|
+
|
|
75
|
+
API keys (only needed for the modules that declare them in the table above):
|
|
76
|
+
|
|
77
|
+
- `COINALYZE_API_KEY` — free signup at coinalyze.net (no card).
|
|
78
|
+
- `BIRDEYE_API_KEY` — free tier at birdeye.so (~30 req/min on the endpoints used here).
|
|
79
|
+
- `MORALIS_API_KEY` — free tier at moralis.com; primary source for `pumpfun` discovery (`new_tokens`, `about_to_bond`, `recently_graduated`).
|
|
80
|
+
- `BITQUERY_API_KEY` — free tier at bitquery.io; fallback for `pumpfun.new_tokens` (Bitquery has the richest Pump.fun-specific schema). Either Moralis or Bitquery alone gets you working discovery. On-chain `bonding_state` only needs `HELIUS_API_KEY`. Also unlocks the 5 Bitquery-exclusive analytics functions (top_traders, live_trades, migration_events, curve_trajectory, holder_distribution).
|
|
81
|
+
- `NEYNAR_API_KEY` — free signup at dev.neynar.com. As of May 2026 the free tier only includes `user_by_username` — `search_casts`, `channel_feed`, `trending_fungibles` and the other 5 require a paid plan.
|
|
82
|
+
- `ALCHEMY_API_KEY` — free tier covers Base + ETH at app.alchemy.com.
|
|
83
|
+
- `HELIUS_API_KEY` — free tier at helius.dev.
|
|
84
|
+
- `BASESCAN_API_KEY` — currently declared but not consumed by any shipped module; reserved for the planned etherscan/basescan module.
|
|
85
|
+
- `COINGECKO_API_KEY` — CoinGecko Pro plan (paid). Uses `pro-api.coingecko.com` and unlocks Pro-only endpoints + 500 req/min+.
|
|
86
|
+
- `COINGECKO_DEMO_API_KEY` — CoinGecko Demo plan (free signup). Same public endpoints with a slightly higher rate-limit than no-key.
|
|
87
|
+
- `ETHERSCAN_API_KEY` — Etherscan V2 (free signup at etherscan.io). One key works across all V2-supported chains via the `chainid` parameter (ETH, Base, Arbitrum, Optimism, Polygon, BNB, Avalanche, zkSync, ...). The legacy `BASESCAN_API_KEY` env is also accepted as a fallback.
|
|
88
|
+
- `SOLSCAN_API_KEY` — Solscan Pro (paid). Public endpoints work without it.
|
|
89
|
+
- `LUNARCRUSH_API_KEY` — required for any LunarCrush call. Free signup at lunarcrush.com (~100 req/day on free tier).
|
|
90
|
+
- `MESSARI_API_KEY` — Messari. Free 'Hobbyist' tier limited to ~20 req/min on a small subset; most useful endpoints are paid (Pro / Enterprise).
|
|
91
|
+
- `TOKENTERMINAL_API_KEY` — Token Terminal. Free tier covers project catalog + limited metrics; full historical series + most metrics are paid.
|
|
92
|
+
- `THEGRAPH_API_KEY` — optional. Without it the public gateway is used (heavily throttled); with it the decentralized network gateway gives much higher quota.
|
|
93
|
+
|
|
94
|
+
Cache TTLs (override only if you know why):
|
|
95
|
+
|
|
96
|
+
- `TCKR_DEX_TTL_S`, `TCKR_DEX_OHLCV_TTL_S`, `TCKR_PERPS_TTL_S`,
|
|
97
|
+
`TCKR_TVL_TTL_S`, `TCKR_ONCHAIN_TTL_S`, `TCKR_FUNDING_AGG_TTL_S`,
|
|
98
|
+
`TCKR_LIQUIDATION_TTL_S`, `TCKR_SECURITY_TTL_S`,
|
|
99
|
+
`TCKR_HONEYPOT_TTL_S`, `TCKR_BIRDEYE_TTL_S`, `TCKR_TOKEN_METADATA_TTL_S`,
|
|
100
|
+
`TCKR_COINGECKO_TTL_S` (default 30), `TCKR_COINGECKO_HISTORY_TTL_S` (default 600),
|
|
101
|
+
`TCKR_POLYMARKET_TTL_S` (default 30),
|
|
102
|
+
`TCKR_PYTH_PRICE_TTL_S` (default 10), `TCKR_PYTH_CATALOG_TTL_S` (default 3600),
|
|
103
|
+
`TCKR_ETHERSCAN_TTL_S` (default 30), `TCKR_ETHERSCAN_CONTRACT_TTL_S` (default 86400),
|
|
104
|
+
`TCKR_ETHERSCAN_GAS_TTL_S` (default 15), `TCKR_ETHERSCAN_STATS_TTL_S` (default 600),
|
|
105
|
+
`TCKR_SOLSCAN_TTL_S` (default 60),
|
|
106
|
+
`TCKR_LUNARCRUSH_TTL_S` (default 120),
|
|
107
|
+
`TCKR_MESSARI_TTL_S` (default 300),
|
|
108
|
+
`TCKR_TOKENTERMINAL_TTL_S` (default 300), `TCKR_TOKENTERMINAL_HISTORY_TTL_S` (default 3600),
|
|
109
|
+
`TCKR_THEGRAPH_TTL_S` (default 60).
|
|
110
|
+
|
|
111
|
+
HTTP behavior:
|
|
112
|
+
|
|
113
|
+
- `TCKR_HTTP_TIMEOUT_S` (default 15.0), `TCKR_HTTP_MAX_RETRIES` (default 2).
|
|
114
|
+
|
|
115
|
+
## New-pair / early-stage strategies (Sol + Base)
|
|
116
|
+
|
|
117
|
+
The thesis: the highest-asymmetry crypto trades are early entries on new
|
|
118
|
+
tokens that grow. The full toolkit for that is now shipped — `pumpfun` and
|
|
119
|
+
`virtuals` / `clanker` cover discovery on each chain's dominant launchpad;
|
|
120
|
+
`bonding_state` + `lp_lock` cover safety; `wallet_pnl` covers smart-money
|
|
121
|
+
tracking; `jito` quantifies bot-sniping intensity; `neynar` adds the
|
|
122
|
+
Farcaster social signal on Base. The modules compose:
|
|
123
|
+
|
|
124
|
+
- `pumpfun.live_trades(mint)` signatures → `jito.snipe_score(sigs)` →
|
|
125
|
+
"how bot-sniped is this launch?"
|
|
126
|
+
- `clanker.new_tokens()` `requestor_fid` → `neynar.user_popular_casts(fid)` →
|
|
127
|
+
"what is this deployer saying about their token?"
|
|
128
|
+
- `clanker.new_tokens()` `pool_address` (V4 PoolId) → `lp_lock(pool_id)` →
|
|
129
|
+
"is this Clanker token's LP locked?"
|
|
130
|
+
- `pumpfun.top_traders(mint)` wallets → `wallet_pnl(wallet)` → "is the top
|
|
131
|
+
buyer of this token actually profitable across their other trades?"
|
|
132
|
+
|
|
133
|
+
Future open items (no fixed timeline): per-lock `unlock_at` decoding for
|
|
134
|
+
UNCX V2/V3/V4, Team Finance Base address, V3/V4 USD-value-of-locked-liquidity
|
|
135
|
+
(needs tick math), neynar paid-tier endpoints when budgeted.
|
|
136
|
+
|
|
137
|
+
## Consumers
|
|
138
|
+
|
|
139
|
+
`tckr` is currently consumed by:
|
|
140
|
+
|
|
141
|
+
- **Market-Research-Comp** (sibling repo) — uses the fundamental-trading subset
|
|
142
|
+
(`geckoterminal`, `dexscreener` basics, `hyperliquid`, `coinalyze`, `defillama`).
|
|
143
|
+
Contract-safety + Solana-analytics modules ship in the library but are not
|
|
144
|
+
exposed to those agents — reserved for the future new-pair app sketched above.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "tckr"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Async, cached, gracefully-degrading aggregator over the major free crypto data APIs (DEX, perps, TVL, on-chain, social, launchpads, MEV) — plus an agent toolkit that exposes the data to any LLM platform via MCP, the Claude Agent SDK, OpenAI function calling, or LangChain."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
keywords = [
|
|
14
|
+
"crypto", "defi", "dex", "perps", "tvl", "solana", "base", "ethereum",
|
|
15
|
+
"hyperliquid", "geckoterminal", "dexscreener", "defillama", "coinalyze",
|
|
16
|
+
"agent", "mcp", "llm", "claude", "openai", "langchain",
|
|
17
|
+
]
|
|
18
|
+
authors = [
|
|
19
|
+
{ name = "tckr contributors" },
|
|
20
|
+
]
|
|
21
|
+
classifiers = [
|
|
22
|
+
"Development Status :: 4 - Beta",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"Intended Audience :: Financial and Insurance Industry",
|
|
25
|
+
"Operating System :: OS Independent",
|
|
26
|
+
"Programming Language :: Python :: 3",
|
|
27
|
+
"Programming Language :: Python :: 3.11",
|
|
28
|
+
"Programming Language :: Python :: 3.12",
|
|
29
|
+
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Topic :: Office/Business :: Financial",
|
|
31
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
32
|
+
"Framework :: AsyncIO",
|
|
33
|
+
"Typing :: Typed",
|
|
34
|
+
]
|
|
35
|
+
dependencies = [
|
|
36
|
+
"httpx>=0.27",
|
|
37
|
+
"solders>=0.21",
|
|
38
|
+
"eth-abi>=5.0",
|
|
39
|
+
"eth-hash[pycryptodome]>=0.7",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
[project.optional-dependencies]
|
|
43
|
+
# Each adapter is opt-in. Install only what your agent platform needs.
|
|
44
|
+
agent-claude = ["claude-agent-sdk>=0.1"]
|
|
45
|
+
agent-mcp = ["mcp>=1.0"]
|
|
46
|
+
agent-openai = ["openai>=1.40"]
|
|
47
|
+
agent-langchain = ["langchain-core>=0.3"]
|
|
48
|
+
# Convenience meta-extras:
|
|
49
|
+
agent = ["tckr[agent-claude,agent-mcp]"]
|
|
50
|
+
agent-all = ["tckr[agent-claude,agent-mcp,agent-openai,agent-langchain]"]
|
|
51
|
+
# Development:
|
|
52
|
+
dev = [
|
|
53
|
+
"pytest>=8",
|
|
54
|
+
"pytest-asyncio>=0.23",
|
|
55
|
+
"ruff>=0.6",
|
|
56
|
+
"build>=1.2",
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
[project.scripts]
|
|
60
|
+
tckr = "tckr.cli:main"
|
|
61
|
+
# Universal MCP stdio server — spawn from any MCP-compatible client (Claude
|
|
62
|
+
# Code, Cline, Continue.dev, OpenAI Agents, custom orchestrators…).
|
|
63
|
+
# Requires `tckr[agent-mcp]`.
|
|
64
|
+
tckr-mcp = "tckr.agent_toolkit.adapters.mcp_stdio:main"
|
|
65
|
+
|
|
66
|
+
[project.urls]
|
|
67
|
+
Homepage = "https://github.com/tckr-org/tckr"
|
|
68
|
+
Repository = "https://github.com/tckr-org/tckr"
|
|
69
|
+
Issues = "https://github.com/tckr-org/tckr/issues"
|
|
70
|
+
Changelog = "https://github.com/tckr-org/tckr/blob/main/CHANGELOG.md"
|
|
71
|
+
|
|
72
|
+
[tool.setuptools.packages.find]
|
|
73
|
+
include = ["tckr*"]
|
|
74
|
+
|
|
75
|
+
[tool.pytest.ini_options]
|
|
76
|
+
asyncio_mode = "auto"
|
|
77
|
+
testpaths = ["tests"]
|
|
78
|
+
markers = [
|
|
79
|
+
"needs_keys: test requires API keys in the environment",
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
[tool.ruff]
|
|
83
|
+
line-length = 100
|
|
84
|
+
target-version = "py311"
|
|
85
|
+
|
|
86
|
+
[tool.ruff.lint]
|
|
87
|
+
# Pragmatic default — surface clear bugs without being aesthetically opinionated.
|
|
88
|
+
select = ["E", "F", "W", "I", "B", "UP"]
|
|
89
|
+
ignore = [
|
|
90
|
+
"E501", # line length handled by formatter
|
|
91
|
+
"B008", # function-call default args (httpx uses them)
|
|
92
|
+
"E701", # single-line `if x: y = z` is a deliberate terse idiom in this codebase
|
|
93
|
+
"UP031", # %-format in GraphQL query bodies stays readable; f-strings collide with {...}
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
[tool.ruff.lint.per-file-ignores]
|
|
97
|
+
"tests/*" = ["B018"] # bare expressions in tests are fine (asserts)
|
tckr-0.1.0/setup.cfg
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""tckr — a reusable async crypto data layer + agent toolkit.
|
|
2
|
+
|
|
3
|
+
Import source modules directly:
|
|
4
|
+
|
|
5
|
+
geckoterminal DEX pools, tokens by address, OHLCV (Base, Solana, …)
|
|
6
|
+
dexscreener DEX pairs, search, new-pair discovery, paid-boost rankings
|
|
7
|
+
hyperliquid perps: funding, open interest, marks (single-exchange)
|
|
8
|
+
coinalyze perps cross-exchange: funding spread, OI, liquidations
|
|
9
|
+
defillama chain/protocol TVL, DEX volume, stablecoins, yields
|
|
10
|
+
goplus EVM token contract security scans (honeypot, taxes, holders)
|
|
11
|
+
honeypot EVM sell-simulation backstop (subset of chains)
|
|
12
|
+
birdeye Solana-focused token analytics (holders, trades, security)
|
|
13
|
+
pumpfun Solana memecoin launchpad: discovery + bonding-curve state
|
|
14
|
+
neynar Farcaster API: cast search, channel feeds, trending fungibles
|
|
15
|
+
wallet_pnl FIFO position tracking across Solana + Base wallets
|
|
16
|
+
lp_lock LP-lock detection (Base / EVM) via known locker contracts
|
|
17
|
+
virtuals Virtuals Protocol AI-agent launchpad (Base, multi-chain)
|
|
18
|
+
clanker Clanker Farcaster-native token launcher (Base, multi-chain)
|
|
19
|
+
jito Solana MEV: tip floor, bundle status, snipe-score for txs
|
|
20
|
+
alchemy on-chain wallet balances + transfers
|
|
21
|
+
helius Solana RPC convenience layer
|
|
22
|
+
coingecko canonical spot / market / historical prices (v3 + Pro)
|
|
23
|
+
polymarket Polymarket Gamma API: prediction-market odds
|
|
24
|
+
pyth Pyth Network on-chain oracle prices (~400 feeds, keyless)
|
|
25
|
+
etherscan Etherscan V2 unified EVM block explorer (~70 chains, one key)
|
|
26
|
+
solscan Solana block explorer (public + Pro paths)
|
|
27
|
+
lunarcrush social sentiment: Galaxy Score, AltRank, topic feeds
|
|
28
|
+
messari research-grade asset profiles, metrics, news
|
|
29
|
+
tokenterminal protocol fundamentals (revenue, P/E, treasury)
|
|
30
|
+
thegraph GraphQL access to indexed subgraphs (Uniswap, Aave, ...)
|
|
31
|
+
|
|
32
|
+
Every network call is async, cached (tckr.cache.TTLCache), and degrades
|
|
33
|
+
gracefully — it returns None / [] rather than raising when an upstream fails.
|
|
34
|
+
Modules that need an API key log a warning and return empty when the key is
|
|
35
|
+
absent rather than crashing the caller.
|
|
36
|
+
|
|
37
|
+
Capability registry: `tckr.registry` tracks per-module tier and which
|
|
38
|
+
env vars unlock each. `capabilities()` returns the live state as JSON; the CLI
|
|
39
|
+
`tckr status` prints it. The same registry powers tier tags on tool
|
|
40
|
+
descriptions in `tckr.agent_toolkit`.
|
|
41
|
+
|
|
42
|
+
Agent toolkit (optional extras): `pip install tckr[agent-claude]` for
|
|
43
|
+
the Claude Agent SDK in-process MCP server, `tckr[agent-mcp]` for the
|
|
44
|
+
universal stdio MCP server (console script `tckr-mcp`, works with any
|
|
45
|
+
MCP client), `tckr[agent-openai]` for OpenAI function-calling, or
|
|
46
|
+
`tckr[agent-langchain]` for LangChain `StructuredTool` wrappers.
|
|
47
|
+
"""
|
|
48
|
+
from __future__ import annotations
|
|
49
|
+
|
|
50
|
+
from tckr.registry import capabilities # re-exported for convenience
|
|
51
|
+
|
|
52
|
+
__version__ = "0.1.0"
|
|
53
|
+
|
|
54
|
+
__all__ = ["capabilities", "__version__"]
|