Two paths to interact with the Fluently 4D knowledge base. GitHub MCP is the default community path — no server to install, no rebuild needed, works with any AI agent.
| Path | When to use |
|---|---|
| GitHub MCP (default) | Community knowledge, no server, agent reads public repo directly |
| Custom MCP server | Private knowledge, isolation, offline, automated contributions |
The agent reads the Fluently knowledge base directly from the public GitHub repo using the GitHub MCP server. No auth required for reads. Knowledge updates the moment a cycle is merged — no rebuild, no redeploy.
In your agent's MCP config — ~/.claude/settings.json (Claude Code), claude_desktop_config.json (Claude Desktop), or your IDE's MCP settings (VS Code Copilot, Cursor, Continue…):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx"
}
}
}
}Token is optional for read-only access to the public repo. Required only to open contribution PRs.
# Step 1 — Orient (read the guide)
Read the file KNOWLEDGE.md in repo Fluently-Org/fluently (main branch).
Tell me what domains are available and how cycles are structured.
# Step 2 — Discover all cycles
Read knowledge/index.json in Fluently-Org/fluently.
List all cycles grouped by domain with IDs and tags.
# Step 3 — Deep-read a specific cycle
Read knowledge/coding-code-review-triage.yaml in Fluently-Org/fluently.
Summarize the 4D guidance and the most important antipattern.
# Step 4 — Find the best fit for your task
I want to use AI to summarize daily standup notes and flag blockers automatically.
Read knowledge/index.json and the YAML files for the 2–3 most likely matching cycles.
Reason over them and tell me which fits best and why — no numeric scores, just your assessment.
# Step 5 — Contribute a new cycle (requires GitHub token)
I want to contribute a new cycle. Read KNOWLEDGE.md for the schema.
Help me fill in all 4D dimensions for:
"AI drafts customer support responses, human reviews and sends."
Then open a PR to Fluently-Org/fluently adding the YAML file under knowledge/.
# Verify index.json is live and valid
curl -s "https://raw.githubusercontent.com/Fluently-Org/fluently/main/knowledge/index.json" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
print('total:', d['total'])
print('domains:', list(d['byDomain'].keys()))
"
# Read a specific cycle
curl -s "https://raw.githubusercontent.com/Fluently-Org/fluently/main/knowledge/coding-code-review-triage.yaml"
# Read the agent orientation guide
curl -s "https://raw.githubusercontent.com/Fluently-Org/fluently/main/KNOWLEDGE.md" | head -50Use when you need private knowledge, offline access, or automated PRs without leaving the agent.
# From source (dev)
npm ci
npm run build -w packages/scorer
npm run build -w packages/mcp-server
# Or globally from npm
npm install -g fluently-mcp-server# Default: github-public connector (live knowledge, no auth)
node packages/mcp-server/dist/bin.js
# Local connector (offline / private knowledge)
FLUENTLY_CONNECTOR=local \
FLUENTLY_LOCAL_PATH=./knowledge \
node packages/mcp-server/dist/bin.js
# Private GitHub repo
FLUENTLY_CONNECTOR=github-private \
FLUENTLY_GITHUB_REPO=your-org/your-knowledge-repo \
FLUENTLY_GITHUB_TOKEN=ghp_xxx \
node packages/mcp-server/dist/bin.js# 1. List all tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "import sys,json; print([t['name'] for t in json.load(sys.stdin)['result']['tools']])"
# Expected: ['list_domains', 'find_relevant_cycles', 'get_cycle_detail',
# 'get_collaboration_pattern', 'get_dimension_guidance',
# 'refresh_knowledge', 'contribute_cycle']
# 2. List domains and cycle counts
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_domains","arguments":{}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
print(c['source'], '|', c['total'], 'cycles'); print(c['summary'])
"
# Expected: source=github-public | 16 cycles, breakdown by domain
# 3. Find relevant cycles for a task
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"find_relevant_cycles","arguments":{"task_description":"AI reviews pull requests for code quality","domain":"coding","limit":3}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
for x in c['cycles']: print(x['id'], '-', x['title'])
"
# Expected: ranked list of coding cycles (e.g. code-review-triage first)
# 4. Get full cycle detail
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_cycle_detail","arguments":{"id":"code-review-triage"}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])['cycle']
print(c['title'], '|', c['domain'])
for d in ['delegation','description','discernment','diligence']:
print(f' {d}: {c[\"dimensions\"][d][\"antipattern\"]}')
"
# Expected: title + 4 antipattern lines
# 5. Get dimension guidance across a domain
echo '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"get_dimension_guidance","arguments":{"dimension":"discernment","domain":"coding"}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
print(c['dimension'], 'in', c['domain'])
for g in c['guidance']: print(' -', g['cycle'], '|', g['antipattern'])
"
# Expected: discernment antipatterns for all coding cycles
# 6. Contribute a cycle — validation error (missing fields)
echo '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"contribute_cycle","arguments":{"cycle":{"id":"bad","title":"Incomplete"}}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
print('success:', c['success']); print('message:', c['message'])
"
# Expected: success=False, validation errors listing missing required fields
# 7. Force refresh knowledge from connector
echo '{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"refresh_knowledge","arguments":{}}}' \
| node packages/mcp-server/dist/bin.js 2>/dev/null \
| python3 -c "
import sys,json
c = json.loads(json.load(sys.stdin)['result']['content'][0]['text'])
print(c['message'])
"
# Expected: "Knowledge base refreshed from github-public. 16 cycles now available."Same config block for all clients — drop it into:
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json(Mac) - Claude Code:
~/.claude/settings.json - VS Code Copilot / Cursor / Continue: check extension MCP settings
{
"mcpServers": {
"fluently": { "command": "fluently-mcp-server" }
}
}With private knowledge:
{
"mcpServers": {
"fluently": {
"command": "fluently-mcp-server",
"env": {
"FLUENTLY_CONNECTOR": "github-private",
"FLUENTLY_GITHUB_REPO": "your-org/your-knowledge-repo",
"FLUENTLY_GITHUB_TOKEN": "ghp_xxx"
}
}
}
}In .claude/settings.json (project) or ~/.claude/settings.json (global):
{
"mcpServers": {
"fluently": { "command": "fluently-mcp-server" }
}
}| GitHub MCP (default) | Custom MCP server | |
|---|---|---|
| Setup | Add GitHub MCP server config | npm install -g fluently-mcp-server |
| Auth | Optional for reads, required for PR | None for community, token for private |
| Knowledge source | Direct repo file reads (always current) | Live GitHub fetch + 1h cache + offline fallback |
| Private knowledge | Only if repo is private | Yes — private repo, fork, local, SQL/NoSQL |
| Contribution | Agent opens PR via GitHub MCP | contribute_cycle tool (automated or instructions) |
| Offline | No | Yes — bundled fallback |
| Scoring | None — agent reasons over raw YAML | None — agent reasons over ranked candidates |