Skip to content

Commit ad4980f

Browse files
KI7MTclaude
andcommitted
Add iota-mcp to docs site, fix credentials YAML→JSON reference
- New server page: docs/servers/iota.md (6 tools, public API) - Updated all counts: 9→10 packages, 54→60 security tests - Added iota-mcp to nav, fleet summary, rate limiting, credential table, getting-started (install, mock, inspector, client config, examples) - Fixed credentials.md: persona index is JSON, not YAML - Updated llms.txt for LLM discoverability Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 583ad2b commit ad4980f

8 files changed

Lines changed: 145 additions & 11 deletions

File tree

docs/credentials.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## How It Works
44

5-
qso-graph uses two layers for credential management: a **persona index** (non-secret YAML file with your callsign and date range) and the **OS keyring** (where secrets are stored). A persona is your callsign identity; a provider is a service like eQSL or QRZ. Credentials are never stored in config files — only in your operating system's secure keyring.
5+
qso-graph uses two layers for credential management: a **persona index** (non-secret JSON file with your callsign and date range) and the **OS keyring** (where secrets are stored). A persona is your callsign identity; a provider is a service like eQSL or QRZ. Credentials are never stored in config files — only in your operating system's secure keyring.
66

77
---
88

@@ -37,6 +37,7 @@ That's it. The MCP servers will find your credentials automatically.
3737
| hamqth-mcp | `hamqth` | username + password | HamQTH.com login (free account) |
3838
| pota-mcp || none | Public API, no setup needed |
3939
| sota-mcp || none | Public API, no setup needed |
40+
| iota-mcp || none | Public API, no setup needed |
4041
| solar-mcp || none | Public API, no setup needed |
4142
| wspr-mcp || none | Public API, no setup needed |
4243

docs/getting-started.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pip install hamqth-mcp
1414
# Public servers (no credentials needed — just install and go)
1515
pip install pota-mcp
1616
pip install sota-mcp
17+
pip install iota-mcp
1718
pip install solar-mcp
1819
pip install wspr-mcp
1920
```
@@ -76,6 +77,9 @@ Add servers to `~/Library/Application Support/Claude/claude_desktop_config.json`
7677
"sota": {
7778
"command": "sota-mcp"
7879
},
80+
"iota": {
81+
"command": "iota-mcp"
82+
},
7983
"solar": {
8084
"command": "solar-mcp"
8185
},
@@ -173,6 +177,7 @@ LOTW_MCP_MOCK=1 lotw-mcp
173177
HAMQTH_MCP_MOCK=1 hamqth-mcp
174178
POTA_MCP_MOCK=1 pota-mcp
175179
SOTA_MCP_MOCK=1 sota-mcp
180+
IOTA_MCP_MOCK=1 iota-mcp
176181
SOLAR_MCP_MOCK=1 solar-mcp
177182
WSPR_MCP_MOCK=1 wspr-mcp
178183
```
@@ -202,6 +207,7 @@ Each server uses a default port for Inspector mode:
202207
| sota-mcp | 8007 |
203208
| solar-mcp | 8008 |
204209
| wspr-mcp | 8009 |
210+
| iota-mcp | 8010 |
205211

206212
---
207213

@@ -216,3 +222,5 @@ Once configured, ask your AI assistant:
216222
- "Find SOTA summits near Boise, Idaho"
217223
- "What are the current solar conditions?"
218224
- "What bands are open on WSPR right now?"
225+
- "Look up IOTA group OC-019"
226+
- "What IOTA groups are near Boise, Idaho?"

docs/index.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Ask your AI assistant to look up a callsign, check your LoTW confirmations, find
66

77
---
88

9-
## 9 Packages
9+
## 10 Packages
1010

1111
### Foundation
1212

@@ -29,6 +29,7 @@ Ask your AI assistant to look up a callsign, check your LoTW confirmations, find
2929
|---------|:-----:|--------------|
3030
| [pota-mcp](servers/pota.md) | 6 | Live spots, park info, stats, schedules |
3131
| [sota-mcp](servers/sota.md) | 5 | Spots, alerts, summit info, nearby search |
32+
| [iota-mcp](servers/iota.md) | 6 | Group lookup, island search, DXCC mapping, nearby |
3233
| [solar-mcp](servers/solar.md) | 6 | SFI, Kp, solar wind, X-ray, band outlook |
3334
| [wspr-mcp](servers/wspr.md) | 5 | Beacon spots, band activity, propagation |
3435

@@ -44,7 +45,7 @@ pip install adif-mcp
4445
pip install eqsl-mcp qrz-mcp lotw-mcp hamqth-mcp
4546

4647
# Public services (no credentials needed)
47-
pip install pota-mcp sota-mcp solar-mcp wspr-mcp
48+
pip install pota-mcp sota-mcp iota-mcp solar-mcp wspr-mcp
4849
```
4950

5051
See [Getting Started](getting-started.md) for MCP client configuration.
@@ -106,5 +107,5 @@ Dashboard, physics lab, DXCC progress, path analyzer, and log viewer — all pow
106107
- **GitHub**: [github.com/qso-graph](https://github.com/qso-graph)
107108
- **PyPI**: [eqsl-mcp](https://pypi.org/project/eqsl-mcp/) · [qrz-mcp](https://pypi.org/project/qrz-mcp/) · [lotw-mcp](https://pypi.org/project/lotw-mcp/)
108109
- **Foundation**: [adif-mcp](servers/adif-mcp.md) — ADIF 3.1.6 spec engine + credential management ([PyPI](https://pypi.org/project/adif-mcp/))
109-
- **Testing**: [48/48 PASS](testing.md) — security audit + ADIF 3.1.6 official test corpus + forensic validation
110+
- **Testing**: [60/60 PASS](testing.md) — security audit + ADIF 3.1.6 official test corpus + forensic validation
110111
- **Related**: [IONIS](https://ionis-ai.com/) — HF propagation prediction from 14B amateur radio observations

docs/llms.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# qso-graph — MCP Servers for Amateur Radio
22

3-
> Open-source Model Context Protocol servers connecting AI assistants to amateur radio services. 9 packages, secure by design.
3+
> Open-source Model Context Protocol servers connecting AI assistants to amateur radio services. 10 packages, secure by design.
44

55
## Foundation
66

@@ -18,13 +18,14 @@
1818
- [pota-mcp](https://qso-graph.io/servers/pota/): Parks on the Air — live spots, park info, stats, schedules, location search. 6 tools.
1919
- [sota-mcp](https://qso-graph.io/servers/sota/): Summits on the Air — spots, alerts, summit info, nearby search, activator stats. 5 tools.
2020
- [solar-mcp](https://qso-graph.io/servers/solar/): NOAA SWPC — SFI, Kp, solar wind, X-ray flux, band outlook, alerts. 6 tools.
21+
- [iota-mcp](https://qso-graph.io/servers/iota/): Islands on the Air — group lookup, island search, DXCC mapping, nearby groups, programme stats. 6 tools.
2122
- [wspr-mcp](https://qso-graph.io/servers/wspr/): WSPR network — beacon spots, band activity, propagation paths, TX power. 5 tools.
2223

2324
## Documentation
2425

2526
- [Getting Started](https://qso-graph.io/getting-started/): Installation, credential setup, MCP client configuration for Claude Desktop, Claude Code, ChatGPT, Cursor, VS Code, and Gemini CLI.
2627
- [Architecture](https://qso-graph.io/architecture/): System design — foundation layer, credential flow, rate limiting, read-only security model.
27-
- [Testing & Validation](https://qso-graph.io/testing/): 54 security tests across 9 packages, ADIF 3.1.6 official test corpus validation, forensic tests from real operator data.
28+
- [Testing & Validation](https://qso-graph.io/testing/): 60 security tests across 10 packages, ADIF 3.1.6 official test corpus validation, forensic tests from real operator data.
2829
- [Security](https://qso-graph.io/security/): 10 non-negotiable security guarantees, credential architecture, forbidden patterns, release process, incident response.
2930

3031
## Key Facts

docs/servers/index.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Server Overview
22

3-
qso-graph provides 9 MCP packages covering amateur radio logging, confirmations, and propagation services.
3+
qso-graph provides 10 MCP packages covering amateur radio logging, confirmations, and propagation services.
44

55
---
66

@@ -27,6 +27,7 @@ qso-graph provides 9 MCP packages covering amateur radio logging, confirmations,
2727
|---------|:-----:|---------|-------------|
2828
| [pota-mcp](pota.md) | 6 | Parks on the Air | None (public) |
2929
| [sota-mcp](sota.md) | 5 | Summits on the Air | None (public) |
30+
| [iota-mcp](iota.md) | 6 | Islands on the Air | None (public) |
3031
| [solar-mcp](solar.md) | 6 | NOAA SWPC | None (public) |
3132
| [wspr-mcp](wspr.md) | 5 | WSPR network | None (public) |
3233

@@ -47,7 +48,7 @@ Every tool call includes a `persona` parameter so the server knows which credent
4748

4849
### Public (No Auth)
4950

50-
POTA, SOTA, Solar, and WSPR servers access public APIs — no credentials needed. Just install and go.
51+
POTA, SOTA, IOTA, Solar, and WSPR servers access public APIs — no credentials needed. Just install and go.
5152

5253
---
5354

@@ -91,5 +92,6 @@ Each server implements rate limiting appropriate for its service:
9192
| hamqth-mcp | 500ms |||
9293
| pota-mcp | 100ms |||
9394
| sota-mcp | 200ms |||
95+
| iota-mcp | 200ms |||
9496
| solar-mcp | 200ms |||
9597
| wspr-mcp | 200ms |||

docs/servers/iota.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# iota-mcp
2+
3+
**Islands on the Air integration — group lookup, island search, DXCC mapping, nearby groups, programme statistics.**
4+
5+
```bash
6+
pip install iota-mcp
7+
```
8+
9+
[GitHub](https://github.com/qso-graph/iota-mcp) · [PyPI](https://pypi.org/project/iota-mcp/)
10+
11+
---
12+
13+
## Tools
14+
15+
All 6 tools are **public** — no credentials needed.
16+
17+
| Tool | Description |
18+
|------|-------------|
19+
| `iota_lookup` | Look up an IOTA group by reference number |
20+
| `iota_search` | Search groups and islands by name |
21+
| `iota_islands` | List all islands and subgroups in a group |
22+
| `iota_dxcc` | Bidirectional DXCC-to-IOTA mapping |
23+
| `iota_stats` | Programme summary statistics |
24+
| `iota_nearby` | Find IOTA groups nearest to a location |
25+
26+
---
27+
28+
## Tool Reference
29+
30+
### iota_lookup
31+
32+
Look up an IOTA group by reference number.
33+
34+
| Parameter | Type | Required | Description |
35+
|-----------|------|:--------:|-------------|
36+
| `refno` | str | Yes | IOTA reference number (e.g., "NA-005", "EU-005", "OC-019") |
37+
38+
Returns group name, DXCC entity, bounding box, center coordinates, credit percentage, and island count.
39+
40+
### iota_search
41+
42+
Search IOTA groups and islands by name.
43+
44+
| Parameter | Type | Required | Description |
45+
|-----------|------|:--------:|-------------|
46+
| `query` | str | Yes | Search text (e.g., "Hawaii", "Shetland", "Comoro") |
47+
| `limit` | int | No | Maximum results to return (default 25) |
48+
49+
Searches both group names and individual island names. Results are deduplicated by IOTA reference number.
50+
51+
### iota_islands
52+
53+
List all islands and subgroups in an IOTA group.
54+
55+
| Parameter | Type | Required | Description |
56+
|-----------|------|:--------:|-------------|
57+
| `refno` | str | Yes | IOTA reference number (e.g., "EU-005") |
58+
59+
Returns the full hierarchy: subgroups containing individual islands with names and IDs.
60+
61+
### iota_dxcc
62+
63+
Bidirectional DXCC-to-IOTA mapping.
64+
65+
| Parameter | Type | Required | Description |
66+
|-----------|------|:--------:|-------------|
67+
| `dxcc_num` | str | No | DXCC entity number (e.g., "291" for USA, "223" for England) |
68+
| `refno` | str | No | IOTA reference number (e.g., "EU-005") |
69+
70+
Provide either `dxcc_num` to find all IOTA groups for a DXCC entity, or `refno` to find which DXCC entities an IOTA group belongs to.
71+
72+
### iota_stats
73+
74+
Get IOTA programme summary statistics. No parameters.
75+
76+
Returns total groups and islands, breakdown by continent, DXCC entity count, and most/least credited groups.
77+
78+
### iota_nearby
79+
80+
Find IOTA groups nearest to a location.
81+
82+
| Parameter | Type | Required | Description |
83+
|-----------|------|:--------:|-------------|
84+
| `latitude` | float | Yes | Latitude in decimal degrees (e.g., 43.6 for Boise) |
85+
| `longitude` | float | Yes | Longitude in decimal degrees (e.g., -116.2 for Boise) |
86+
| `limit` | int | No | Maximum results to return (default 20) |
87+
88+
Returns IOTA groups sorted by great-circle distance from the given coordinates.
89+
90+
---
91+
92+
## Data Source
93+
94+
Data comes from the official [IOTA website](https://www.iota-world.org/) JSON downloads — refreshed daily at 00:00 UTC:
95+
96+
- **fulllist.json** (~1.3 MB) — complete group/subgroup/island hierarchy (1,178 groups, 13,020 islands)
97+
- **dxcc_matches_one_iota.json** (~3.5 KB) — 1:1 DXCC-to-IOTA mapping
98+
99+
Data is downloaded once on first use and cached in memory for 24 hours.
100+
101+
---
102+
103+
## No Credential Setup Needed
104+
105+
IOTA data is completely public. Just install and start using it — no `adif-mcp` dependency, no persona setup.
106+
107+
---
108+
109+
## Mock Mode
110+
111+
```bash
112+
IOTA_MCP_MOCK=1 iota-mcp
113+
```
114+
115+
## MCP Inspector
116+
117+
```bash
118+
iota-mcp --transport streamable-http --port 8010
119+
```

docs/testing.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
| [sota-mcp](servers/sota.md) | v0.1.0 | 6 | Yes | PASS |
1818
| [solar-mcp](servers/solar.md) | v0.1.0 | 6 | Yes | PASS |
1919
| [wspr-mcp](servers/wspr.md) | v0.1.0 | 6 | Yes | PASS |
20-
| **Total** || **54** | **9/9** | **9/9 PASS** |
20+
| [iota-mcp](servers/iota.md) | v0.1.0 | 6 | Yes | PASS |
21+
| **Total** || **60** | **10/10** | **10/10 PASS** |
2122

2223
---
2324

24-
## Security Test Suite (All 9 Packages)
25+
## Security Test Suite (All 10 Packages)
2526

2627
Every package includes `test_security.py` with 6 source-code audit tests. These are not runtime tests — they scan all Python source files for forbidden patterns:
2728

mkdocs.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ site_name: qso-graph — MCP Servers for Ham Radio
22
site_description: >-
33
Open-source MCP servers connecting AI assistants to ham radio services.
44
Open-source MCP servers connecting AI assistants to ham radio services.
5-
ADIF validation, eQSL, QRZ, LoTW, HamQTH, POTA, SOTA, space weather, and WSPR analytics. Secure by design.
5+
ADIF validation, eQSL, QRZ, LoTW, HamQTH, POTA, SOTA, IOTA, space weather, and WSPR analytics. Secure by design.
66
site_author: Greg Beam, KI7MT
77
site_url: https://qso-graph.io/
88
repo_url: https://github.com/qso-graph/qso-graph.github.io
@@ -76,6 +76,7 @@ nav:
7676
- Public Services:
7777
- POTA: servers/pota.md
7878
- SOTA: servers/sota.md
79+
- IOTA: servers/iota.md
7980
- Solar Weather: servers/solar.md
8081
- WSPR: servers/wspr.md
8182
- Architecture: architecture.md

0 commit comments

Comments
 (0)