MCP server: One MCP server.

ASTGL Knowledge

@jmeg8rMCP server · External

Search and cite ASTGL articles about MCP servers, local AI, and AI automation.

Developer documentationv1.3.1TypeScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: creates or changes data: records, files, settings.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npmmcp-astgl-knowledgev1.3.1

Run

npx -y mcp-astgl-knowledge

MCP client config

{
  "mcpServers": {
    "astgl-knowledge": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-astgl-knowledge"
      ]
    }
  }
}
README7 min read

mcp-astgl-knowledge

An MCP server that lets AI assistants search and cite content from As The Geek Learns — covering MCP servers, local AI, AI automation, and ASTGL project documentation.

When an AI assistant connects to this server, it can search the indexed ASTGL entries (articles, tutorials, comparisons, guides, and project docs). Search results include source URLs back to astgl.ai.

Requirement: the semantic tools (search_articles, get_answer, get_tutorial, compare_topics) embed your query at runtime with a local Ollama running nomic-embed-text (default http://localhost:11434). The metadata tools (find_articles, list_tags, list_topics, get_latest) work without Ollama.

Quick Start

Claude Desktop

Add to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "astgl-knowledge": {
      "command": "npx",
      "args": ["-y", "mcp-astgl-knowledge"]
    }
  }
}

Claude Code

Add to your project's .mcp.json:

json
{
  "mcpServers": {
    "astgl-knowledge": {
      "command": "npx",
      "args": ["-y", "mcp-astgl-knowledge"]
    }
  }
}

Cursor / Generic MCP Client

json
{
  "mcpServers": {
    "astgl-knowledge": {
      "command": "npx",
      "args": ["-y", "mcp-astgl-knowledge"]
    }
  }
}

With Registration (500 queries/day)

Register via the register tool to get an API key, then add it to your config:

json
{
  "mcpServers": {
    "astgl-knowledge": {
      "command": "npx",
      "args": ["-y", "mcp-astgl-knowledge"],
      "env": {
        "ASTGL_API_KEY": "astgl_your_api_key_here"
      }
    }
  }
}

Tools

search_articles

Search the knowledge base by query. Returns ranked results with relevance scores and source URLs.

ParameterTypeRequiredDescription
querystringYesSearch query (e.g., "how to build an MCP server")
limitnumberNoMax results, 1-20 (default: 5)
content_typestringNoFilter by type: article, tutorial, faq, comparison, guide, newsletter, project

get_answer

Get a direct answer to a specific question. Prefers FAQ entries for concise responses.

ParameterTypeRequiredDescription
questionstringYesA specific question (e.g., "What is an MCP server?")
content_typestringNoFilter by content type

get_tutorial

Get step-by-step instructions from tutorial and guide content.

ParameterTypeRequiredDescription
querystringYesWhat you want to learn (e.g., "setup Ollama on Mac")

compare_topics

Side-by-side comparison of two topics.

ParameterTypeRequiredDescription
topic_astringYesFirst topic
topic_bstringYesSecond topic

get_latest

Get the most recently added content.

ParameterTypeRequiredDescription
limitnumberNoMax results, 1-20 (default: 5)

list_topics

Browse all topics in the knowledge base with content types and section headings.

register

Register your email to unlock 500 queries/day (up from 50).

ParameterTypeRequiredDescription
emailstringYesYour email address

More tools

The server registers 17 tools in total. The others:

ToolWhat it doesMain parameters
find_articlesStructured lookup by tag, type, title text and date range (no embeddings)tag, content_type, title, date_from, date_to
list_tagsEvery tag with its article count—
suggest_ideasTopic suggestions from query analytics (gaps, low-confidence queries)days (default 7), limit
add_idea / list_ideas / export_ideasIdea journal stored alongside the indextitle, description, status, priority, source
export_articleOne article as a markdown posturl
export_topic_roundupRoundup post from related articlestopic, limit
export_qa_compilationFAQ-style markdown from article Q&A pairstopic, limit
generate_dashboard_dataJSON analytics snapshot (optionally written to data/dashboard.json)days (default 30), output_file

Content Types

TypeDescription
articleInformational content about MCP, local AI, automation
projectASTGL project documentation
tutorialStep-by-step how-to guides
comparisonSide-by-side topic analysis
guideComprehensive reference material
newsletterPersonal updates and announcements
faqPrimarily Q&A content
conceptWiki concept pages (only allowlisted pages are public)
entityWiki entity pages (only allowlisted pages are public)

Counts change as content is added; call list_topics or list_tags for the current index. draft and synthesis entries exist only in the maintainer database and are removed from the published one. The content_type descriptions in the tool schemas list only the first seven types.

Rate Limits

TierLimitHow to Get
Public50 queries/dayDefault (anonymous)
Registered500 queries/dayUse the register tool with your email

Limits reset at midnight UTC. Rate limit info is included in every response.

Limits and registrations are enforced by the server process itself: usage and registrations are kept in a local SQLite file (data/query-log.db next to the package, or ASTGL_QUERY_LOG_DB), and anonymous clients get a persistent ID in ~/.astgl-client-id. An ASTGL_API_KEY only counts as registered if it exists in that local registrations table.

How It Works

The knowledge base is pre-built from ASTGL articles using semantic embeddings (nomic-embed-text, 768 dimensions). Content is chunked by section and FAQ entry, embedded, and stored in a SQLite database with sqlite-vec for vector similarity search.

Article embeddings are pre-computed and shipped in the npm package, so you never re-index content. Your query is still embedded at runtime through Ollama for the semantic tools (see the requirement above).

The server opens data/knowledge.db when it exists (a maintainer checkout) and otherwise build/knowledge-public.db. The npm package ships only build/knowledge-public.db, which npm run build-public-db produces by physically removing every non-public row (see docs/adr/).

Performance

  • Typical response time: 100-500ms (embedding lookup + vector search)
  • Embedding results are cached in memory (LRU, 200 entries) — repeated queries are near-instant
  • Ollama calls include 10s timeout + automatic retry
  • Query logging is async/batched to avoid blocking responses
  • Rate limit checks are cached for 5 seconds

For Maintainers

Setup

bash
git clone https://github.com/Jmeg8r/mcp-astgl-knowledge.git
cd mcp-astgl-knowledge
npm install

Scripts

ScriptDescription
npm run buildCompile TypeScript
npm testRun the test suite (node:test via tsx)
npm run devRun MCP server in dev mode (tsx)
npm startRun compiled MCP server
npm run ingestRebuild knowledge.db from local markdown (requires Ollama)
npm run ingest-projectsIndex project docs from astgl-site projects.json
npm run discoverPoll RSS/sitemap for new content
npm run structureProcess discovered content (classify, embed, index)
npm run pipelineDiscover + structure in one step
npm run daily-reportGenerate AEO analytics report
npm run alertsRun content gap alert checks
npm run freshnessCheck for stale content and ecosystem version changes
npm run publish-driftCompare local publishable content against what npm actually serves
npm run citation-testManual AI citation testing
npm run relatedGenerate internal article links via vector similarity
npm run build-public-dbWrite build/knowledge-public.db with non-public rows removed (runs in prepack)

Other maintainer scripts (draft ingest and reconcile, rewrite queue, wiki sync, backup pruning, dashboard data, MCPB bundle) are listed in package.json.

Environment Variables

VariableDefaultDescription
OLLAMA_URLhttp://localhost:11434Ollama endpoint (dev/rebuild only)
EMBED_MODELnomic-embed-textEmbedding model
DISCORD_WEBHOOK_URL—Discord webhook for reports/alerts
ASTGL_API_KEY—Registered tier API key
ASTGL_ARTICLES_DIR~/Projects/astgl-site/src/content/answersLocal markdown source
ASTGL_PROJECTS_JSON~/Projects/astgl-site/src/data/projects.jsonProjects data source
ASTGL_QUERY_LOG_DBdata/query-log.dbQuery log, rate limits and registrations
ASTGL_CITATION_TEST_DBdata/citation-test.dbCitation test results

Automated Jobs

JobSchedulePurpose
Content pipelineEvery 6hDiscover + structure new content
Daily report8 AMQuery analytics + health metrics (JSON report)
Content alerts9 AMGap detection, zero-citation, competitor scan (JSON report)
Freshness check10 AMStale content + ecosystem version tracking (JSON report)
Draft pipelineMidnightIndex pre-publication drafts
Wiki sync00:30Incremental sync of tagged wiki pages into the index
Draft reconciler2 AMRetire draft entries whose source is gone
Citation testing reminderMondays 9 AMReminder to run citation tests

Schedules are defined in cron/*.json; the scheduled report jobs print JSON that an external scheduler picks up and delivers. Run the report scripts with --discord to post to DISCORD_WEBHOOK_URL instead. macOS launchd plists for the pipeline, draft and wiki jobs are in launchd/.

Architecture

mermaid
flowchart TD
    Client["MCP client<br/>(Claude, Cursor, ...)"] -->|"stdio"| Server["MCP server<br/>src/index.ts (17 tools)"]
    Server --> RL["Rate limit + query log<br/>data/query-log.db"]
    Server --> Search["src/search.ts"]
    Search -->|"embed query"| Ollama["Ollama<br/>nomic-embed-text"]
    Search -->|"sqlite-vec KNN"| KDB[("knowledge.db<br/>or knowledge-public.db")]
    Sources["astgl.ai RSS / sitemap<br/>+ local markdown"] -->|"discover, structure, ingest"| KDB
    KDB -->|"build-public-db"| Pub[("build/knowledge-public.db<br/>(shipped in npm)")]
    Jobs["Report jobs<br/>daily report, alerts, freshness"] -.->|"--discord (manual)"| Discord["Discord webhook"]

A rendered diagram is in docs/diagrams/mcp-astgl-knowledge.architecture.svg (source: docs/diagrams/mcp-astgl-knowledge.architecture.json).

License

MIT

Similar modules

Browse Developer documentation