Skip to content

Commit 0a7ed20

Browse files
KI7MTclaude
andcommitted
docs: update site for qso-graph-auth split and correct tool counts
Auth moved from adif-mcp to qso-graph-auth (v0.1.0). All CLI refs updated (adif-mcp → qso-auth), import paths corrected, credential sections redirected. Tool counts fixed: eqsl 4→5, qrz 4→5, lotw 4→5, hamqth 4→7, sota 5→4. Package count 10→11. Enum count 25→26. New page: servers/qso-graph-auth.md. Clublog redirect removed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent bc6e390 commit 0a7ed20

20 files changed

Lines changed: 293 additions & 170 deletions

docs/about/attributions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
### ADIF Specification (adif-mcp)
1010

11-
The [Amateur Data Interchange Format](https://adif.org.uk/) is the foundation of amateur radio logging interoperability. adif-mcp bundles the complete ADIF 3.1.6 specification — 186 fields, 25 enumerations, and 28 data types.
11+
The [Amateur Data Interchange Format](https://adif.org.uk/) is the foundation of amateur radio logging interoperability. adif-mcp bundles the complete ADIF 3.1.6 specification — 186 fields, 26 enumerations, and 28 data types.
1212

1313
- **Author**: Joe Turley, G3ZOD (R.G. Turley OBE)
1414
- **Website**: [adif.org.uk](https://adif.org.uk/)

docs/about/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ QSO-Graph grew out of the IONIS project's need to integrate with ham radio servi
2727
- **[IONIS](https://ionis-ai.com/)** — Ionospheric Neural Inference System. Physics-constrained neural network for HF propagation prediction, trained on 14 billion amateur radio observations.
2828
- **[ionis-mcp](https://pypi.org/project/ionis-mcp/)** — MCP server for propagation analytics using IONIS datasets (175M+ signatures from WSPR, RBN, contests, and PSK Reporter).
2929
- **[ionis-jupyter](https://pypi.org/project/ionis-jupyter/)** — Jupyter notebooks for propagation research.
30-
- **[adif-mcp](https://pypi.org/project/adif-mcp/)** — Foundation library for ADIF parsing and credential management. Used by all authenticated QSO-Graph servers.
30+
- **[qso-graph-auth](https://pypi.org/project/qso-graph-auth/)** — OS keyring credential management for all authenticated QSO-Graph servers.
31+
- **[adif-mcp](https://pypi.org/project/adif-mcp/)** — ADIF 3.1.6 spec engine — validation, parsing, enumerations, geospatial.
3132

3233
---
3334

docs/architecture.md

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Architecture
22

3-
**How QSO-Graph servers work together — one foundation, nine packages, zero cloud dependencies.**
3+
**How QSO-Graph servers work together — two foundation packages, nine MCP servers, zero cloud dependencies.**
44

55
---
66

@@ -22,14 +22,17 @@ graph TD
2222
solar["solar-mcp"]
2323
wspr["wspr-mcp"]
2424
25-
subgraph Foundation["adif-mcp (foundation)"]
25+
subgraph Auth["qso-graph-auth"]
2626
persona["PersonaManager → OS Keyring"]
27-
spec["ADIF 3.1.6 Spec (186 fields, 25 enums)"]
27+
end
28+
29+
subgraph ADIF["adif-mcp"]
30+
spec["ADIF 3.1.6 Spec (186 fields, 26 enums)"]
2831
valid["Validation Engine"]
2932
geo["Geospatial (distance, heading)"]
3033
end
3134
32-
eqsl & qrz & lotw & hamqth --> Foundation
35+
eqsl & qrz & lotw & hamqth --> Auth
3336
end
3437
3538
Servers -->|"HTTPS only"| Services
@@ -41,13 +44,13 @@ graph TD
4144

4245
---
4346

44-
## Foundation: adif-mcp
47+
## Foundation: qso-graph-auth + adif-mcp
4548

46-
adif-mcp provides three capabilities that all other servers depend on:
49+
Two foundation packages provide the shared capabilities that other servers depend on.
4750

48-
### 1. Persona Management
51+
### qso-graph-auth — Credential Management
4952

50-
Named identities with credentials stored in the OS keyring. One persona serves all services:
53+
Named identities (personas) with credentials stored in the OS keyring. One persona serves all services:
5154

5255
```
5356
Persona: "ki7mt"
@@ -57,25 +60,31 @@ Persona: "ki7mt"
5760
└── hamqth → password in OS keyring
5861
```
5962

60-
When a server needs credentials, it calls `adif-mcp` which reads them from the keyring at runtime. Credentials never exist in config files, environment variables, or MCP protocol messages.
63+
When a server needs credentials, it calls `qso-graph-auth` which reads them from the keyring at runtime. Credentials never exist in config files, environment variables, or MCP protocol messages.
64+
65+
```bash
66+
pip install qso-graph-auth
67+
qso-auth persona add --name ki7mt --callsign KI7MT --start 2020-01-01
68+
qso-auth creds set ki7mt eqsl
69+
```
6170

62-
### 2. ADIF 3.1.6 Specification
71+
### adif-mcp — ADIF 3.1.6 Spec Engine
6372

6473
The complete ADIF 3.1.6 spec bundled as JSON:
6574

6675
- **186 fields** with data types, valid ranges, and descriptions
67-
- **25 enumerations** with 4,427 records (Mode, Band, DXCC, Contest_ID, etc.)
76+
- **26 enumerations** with 4,427+ records (Mode, Band, DXCC, Country, Contest_ID, etc.)
6877
- **28 data types** (Number, String, Date, GridSquare, etc.)
6978

70-
All servers share this spec for consistent parsing and validation.
79+
Plus validation, parsing, and geospatial tools. See [adif-mcp](servers/adif-mcp.md) for the full 8-tool reference.
7180

72-
### 3. Validation Engine
81+
### Validation Engine
7382

7483
Record validation against the full spec:
7584

7685
- Field name recognition (186 fields)
7786
- Data type checking (Number, Date, etc.)
78-
- Enum membership checking (43 enum-typed fields across 25 enumerations)
87+
- Enum membership checking (43 enum-typed fields across 26 enumerations)
7988
- Compound format parsing (CreditList, multi-medium)
8089
- Conditional validation (Submode depends on Mode)
8190
- Import-only detection (warn, don't reject historical data)
@@ -96,7 +105,7 @@ Input Validation ──── Regex on all user strings
96105
Rate Limiter ──────── Per-service throttle (prevents account bans)
97106
98107
99-
Credential Lookup ─── OS keyring via adif-mcp (authenticated servers only)
108+
Credential Lookup ─── OS keyring via qso-graph-auth (authenticated servers only)
100109
101110
102111
API Call ──────────── HTTPS only, response parsed
@@ -140,9 +149,9 @@ Each server implements rate limiting appropriate for its service:
140149
Credentials take one path and never deviate:
141150

142151
```
143-
User ──── adif-mcp creds set ──── OS Keyring (encrypted)
152+
User ──── qso-auth creds set ──── OS Keyring (encrypted)
144153
145-
MCP Server ──── adif-mcp read ─────────┘
154+
MCP Server ──── qso-graph-auth read ───┘
146155
│ (in-process, never serialized)
147156
148157
HTTPS Request ──── credential in Authorization header
@@ -169,9 +178,9 @@ pip install eqsl-mcp # just eqsl-mcp + its dependencies
169178
pip install pota-mcp # just pota-mcp, no auth needed
170179
```
171180

172-
Servers don't depend on each other. You can install one or all nine.
181+
Servers don't depend on each other. You can install one or all ten.
173182

174-
Authenticated servers depend on `adif-mcp` for credential management. Public servers (POTA, SOTA, Solar, WSPR) have no dependency on adif-mcp.
183+
Authenticated servers depend on `qso-graph-auth` for credential management. Public servers (POTA, SOTA, IOTA, Solar, WSPR) have no dependency on qso-graph-auth.
175184

176185
---
177186

docs/credentials.md

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ QSO-Graph uses two layers for credential management: a **persona index** (non-se
1010

1111
```bash
1212
# 1. Install the foundation package
13-
pip install adif-mcp
13+
pip install qso-graph-auth
1414

1515
# 2. Create a persona (your callsign identity)
16-
adif-mcp persona add --name ki7mt --callsign KI7MT --start 2020-01-01
16+
qso-auth persona add --name ki7mt --callsign KI7MT --start 2020-01-01
1717

1818
# 3. Store credentials for a service (prompts for username + password)
19-
adif-mcp creds set ki7mt eqsl
19+
qso-auth creds set ki7mt eqsl
2020

2121
# 4. Verify everything is wired up
22-
adif-mcp creds doctor
22+
qso-auth creds doctor
2323
```
2424

2525
That's it. The MCP servers will find your credentials automatically.
@@ -47,7 +47,7 @@ That's it. The MCP servers will find your credentials automatically.
4747
### eQSL
4848

4949
```bash
50-
adif-mcp creds set ki7mt eqsl
50+
qso-auth creds set ki7mt eqsl
5151
```
5252

5353
```
@@ -59,7 +59,7 @@ Password: ********
5959
### LoTW
6060

6161
```bash
62-
adif-mcp creds set ki7mt lotw
62+
qso-auth creds set ki7mt lotw
6363
```
6464

6565
```
@@ -71,7 +71,7 @@ Password: ********
7171
### QRZ (Callsign Lookup)
7272

7373
```bash
74-
adif-mcp creds set ki7mt qrz
74+
qso-auth creds set ki7mt qrz
7575
```
7676

7777
```
@@ -83,7 +83,7 @@ Password: ********
8383
### QRZ (Logbook API)
8484

8585
```bash
86-
adif-mcp creds set ki7mt qrz_logbook
86+
qso-auth creds set ki7mt qrz_logbook
8787
```
8888

8989
```
@@ -95,7 +95,7 @@ API Key: ********
9595
### HamQTH
9696

9797
```bash
98-
adif-mcp creds set ki7mt hamqth
98+
qso-auth creds set ki7mt hamqth
9999
```
100100

101101
```
@@ -111,7 +111,7 @@ Password: ********
111111
Run the doctor command to check all credentials at once:
112112

113113
```bash
114-
adif-mcp creds doctor
114+
qso-auth creds doctor
115115
```
116116

117117
```
@@ -129,7 +129,7 @@ Summary: stored=5, missing=0
129129
To check a single persona:
130130

131131
```bash
132-
adif-mcp creds doctor --persona ki7mt
132+
qso-auth creds doctor --persona ki7mt
133133
```
134134

135135
---
@@ -140,30 +140,30 @@ adif-mcp creds doctor --persona ki7mt
140140

141141
| Command | Description |
142142
|---------|-------------|
143-
| `adif-mcp persona add --name NAME --callsign CALL --start YYYY-MM-DD` | Create a persona |
144-
| `adif-mcp persona list` | List all personas |
145-
| `adif-mcp persona list --verbose` | List with callsign and date range |
146-
| `adif-mcp persona show NAME` | Show persona details |
147-
| `adif-mcp persona set-active NAME` | Set the active persona |
148-
| `adif-mcp persona remove NAME` | Delete a persona |
143+
| `qso-auth persona add --name NAME --callsign CALL --start YYYY-MM-DD` | Create a persona |
144+
| `qso-auth persona list` | List all personas |
145+
| `qso-auth persona list --verbose` | List with callsign and date range |
146+
| `qso-auth persona show NAME` | Show persona details |
147+
| `qso-auth persona set-active NAME` | Set the active persona |
148+
| `qso-auth persona remove NAME` | Delete a persona |
149149

150150
### Credential Commands
151151

152152
| Command | Description |
153153
|---------|-------------|
154-
| `adif-mcp creds set PERSONA PROVIDER` | Store credentials (interactive prompt) |
155-
| `adif-mcp creds get PERSONA PROVIDER` | Show credentials (redacted) |
156-
| `adif-mcp creds get PERSONA PROVIDER --raw` | Show credentials (unmasked) |
157-
| `adif-mcp creds delete PERSONA PROVIDER` | Remove credentials from keyring |
158-
| `adif-mcp creds doctor` | Check all personas for missing credentials |
154+
| `qso-auth creds set PERSONA PROVIDER` | Store credentials (interactive prompt) |
155+
| `qso-auth creds get PERSONA PROVIDER` | Show credentials (redacted) |
156+
| `qso-auth creds get PERSONA PROVIDER --raw` | Show credentials (unmasked) |
157+
| `qso-auth creds delete PERSONA PROVIDER` | Remove credentials from keyring |
158+
| `qso-auth creds doctor` | Check all personas for missing credentials |
159159

160160
### Provider Commands
161161

162162
| Command | Description |
163163
|---------|-------------|
164-
| `adif-mcp provider list` | List supported providers |
165-
| `adif-mcp provider enable PERSONA PROVIDER` | Enable a provider for a persona |
166-
| `adif-mcp provider disable PERSONA PROVIDER` | Disable a provider for a persona |
164+
| `qso-auth provider list` | List supported providers |
165+
| `qso-auth provider enable PERSONA PROVIDER` | Enable a provider for a persona |
166+
| `qso-auth provider disable PERSONA PROVIDER` | Disable a provider for a persona |
167167

168168
---
169169

@@ -173,16 +173,16 @@ If you have multiple callsigns (contest calls, special events, club stations), c
173173

174174
```bash
175175
# Primary callsign
176-
adif-mcp persona add --name ki7mt --callsign KI7MT --start 2020-01-01
177-
adif-mcp creds set ki7mt eqsl
178-
adif-mcp creds set ki7mt qrz
176+
qso-auth persona add --name ki7mt --callsign KI7MT --start 2020-01-01
177+
qso-auth creds set ki7mt eqsl
178+
qso-auth creds set ki7mt qrz
179179

180180
# Contest callsign (with end date)
181-
adif-mcp persona add --name k7mt --callsign K7MT --start 2024-06-01 --end 2024-06-30
182-
adif-mcp creds set k7mt eqsl
181+
qso-auth persona add --name k7mt --callsign K7MT --start 2024-06-01 --end 2024-06-30
182+
qso-auth creds set k7mt eqsl
183183

184184
# Set your primary as active
185-
adif-mcp persona set-active ki7mt
185+
qso-auth persona set-active ki7mt
186186
```
187187

188188
---
@@ -201,19 +201,19 @@ This uses an encrypted file-based keyring instead of GNOME Keyring or KWallet.
201201

202202
### "No credentials found" errors
203203

204-
Run `adif-mcp creds doctor` to see which providers are missing credentials. The fix is always:
204+
Run `qso-auth creds doctor` to see which providers are missing credentials. The fix is always:
205205

206206
```bash
207-
adif-mcp creds set PERSONA PROVIDER
207+
qso-auth creds set PERSONA PROVIDER
208208
```
209209

210210
### Wrong username or password
211211

212212
Delete and re-set the credentials:
213213

214214
```bash
215-
adif-mcp creds delete ki7mt eqsl
216-
adif-mcp creds set ki7mt eqsl
215+
qso-auth creds delete ki7mt eqsl
216+
qso-auth creds set ki7mt eqsl
217217
```
218218

219219
### Where are credentials stored?

docs/getting-started.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,23 @@ All packages require **Python 3.10+**.
2525

2626
## Credential Setup
2727

28-
Servers that access your accounts use [adif-mcp](https://pypi.org/project/adif-mcp/) to store credentials securely in your OS keyring.
28+
Servers that access your accounts use [qso-graph-auth](https://pypi.org/project/qso-graph-auth/) to store credentials securely in your OS keyring.
2929

3030
```bash
31-
pip install adif-mcp
31+
pip install qso-graph-auth
3232

3333
# Create a persona (your callsign identity)
34-
adif-mcp persona add --name ki7mt --callsign KI7MT --start 2020-01-01
34+
qso-auth persona add --name ki7mt --callsign KI7MT --start 2020-01-01
3535

3636
# Store credentials for each service (prompts interactively — never pass passwords on the command line)
37-
adif-mcp creds set ki7mt eqsl
38-
adif-mcp creds set ki7mt lotw
39-
adif-mcp creds set ki7mt qrz
40-
adif-mcp creds set ki7mt qrz_logbook
41-
adif-mcp creds set ki7mt hamqth
37+
qso-auth creds set ki7mt eqsl
38+
qso-auth creds set ki7mt lotw
39+
qso-auth creds set ki7mt qrz
40+
qso-auth creds set ki7mt qrz_logbook
41+
qso-auth creds set ki7mt hamqth
4242

4343
# Verify everything is wired up
44-
adif-mcp creds doctor
44+
qso-auth creds doctor
4545
```
4646

4747
Your credentials are stored in the OS keyring (macOS Keychain, Windows Credential Manager, or Linux Secret Service) — never in config files.

0 commit comments

Comments
 (0)