self-hosted-ai
Engineering log of self-hosted AI on NVIDIA DGX Spark (GB10/SM121A). 60+ articles indexed.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"self-hosted-ai": {
"url": "https://mcp.sovgrid.org/self-hosted-ai?ref=mcp-io"
}
}
}リモートエンドポイント
https://mcp.sovgrid.org/self-hosted-ai?ref=mcp-iostreamable-httpできること
ツール一覧
ツール(5)
🟢search_blog(query, tag, sort, n)
Search the Sovereign AI Blog for articles matching a natural language query, optionally filtered by tag and sorted by relevance or date. Behaviour matrix: - query='', sort=* -> list newest-first, optionally tag-filtered - query!='', sort=relevance -> TF-IDF ranked, optionally tag-filtered - query!='', sort=date_desc -> TF-IDF filtered (score > 0.001), then sorted by date Pure read-only, deterministic for a given KB snapshot.
入力スキーマ
{
"type": "object",
"properties": {
"query": {
"default": "",
"description": "Natural language search query (e.g. 'flashinfer OOM on GB10'). Multi-word queries are tokenized and TF-IDF ranked. Pass empty string to list articles without ranking by relevance.",
"title": "Query",
"type": "string"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tag filter (e.g. 'setup', 'fixes', 'strategy'). Only articles with this tag are considered. Use list_tags to discover available tags.",
"title": "Tag"
},
"sort": {
"default": "relevance",
"description": "Result ordering. 'relevance' uses TF-IDF score (default for non-empty query). 'date_desc' sorts newest first (default behaviour when query is empty). When query is empty, 'relevance' is treated as 'date_desc'.",
"enum": [
"relevance",
"date_desc"
],
"title": "Sort",
"type": "string"
},
"n": {
"default": 5,
"description": "Maximum number of results to return",
"maximum": 20,
"minimum": 1,
"title": "N",
"type": "integer"
}
},
"title": "search_blogArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"items": {
"$ref": "#/$defs/SearchResult"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"$defs": {
"SearchResult": {
"description": "One ranked article result from search_blog.",
"properties": {
"slug": {
"description": "Article slug, use as input to get_article",
"title": "Slug",
"type": "string"
},
"title": {
"description": "Article title",
"title": "Title",
"type": "string"
},
"url": {
"description": "Public URL of the article",
"title": "Url",
"type": "string"
},
"description": {
"description": "Article description or summary",
"title": "Description",
"type": "string"
},
"tags": {
"description": "Topic tags assigned to the article",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"date": {
"default": "",
"description": "Publication date (ISO 8601)",
"title": "Date",
"type": "string"
},
"relevance_score": {
"description": "TF-IDF cosine similarity score, 0.0 to 1.0 (1.0 = direct date-sorted hit when query is empty)",
"title": "Relevance Score",
"type": "number"
},
"quality_score": {
"description": "Build-time editorial quality score",
"title": "Quality Score",
"type": "number"
},
"quality_style": {
"default": "",
"description": "Editorial style category",
"title": "Quality Style",
"type": "string"
}
},
"required": [
"slug",
"title",
"url",
"description",
"tags",
"relevance_score",
"quality_score"
],
"title": "SearchResult",
"type": "object"
}
},
"title": "search_blogOutput"
}🟢list_articles(tag, sort, limit, offset)
List all blog articles. No TF-IDF computation — pure database listing. Use to browse the full corpus, paginate through articles, or filter by tag. For full-text semantic search use search_blog instead.
入力スキーマ
{
"type": "object",
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional tag filter (e.g. 'setup', 'fixes', 'strategy'). Only articles with this tag are considered. Use list_tags to discover available tags.",
"title": "Tag"
},
"sort": {
"default": "date_desc",
"description": "Result ordering. 'date_desc' newest first (default). 'date_asc' oldest first. 'title_asc' alphabetical. 'quality_desc' best quality first.",
"enum": [
"date_desc",
"date_asc",
"title_asc",
"quality_desc"
],
"title": "Sort",
"type": "string"
},
"limit": {
"default": 20,
"description": "Number of results (1-50)",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset (0-based)",
"minimum": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "list_articlesArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"items": {
"$ref": "#/$defs/ArticleSummary"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"$defs": {
"ArticleSummary": {
"description": "A single article entry returned by list_articles.",
"properties": {
"slug": {
"description": "Article slug, use as input to get_article",
"title": "Slug",
"type": "string"
},
"title": {
"description": "Article title",
"title": "Title",
"type": "string"
},
"url": {
"description": "Public URL of the article",
"title": "Url",
"type": "string"
},
"date": {
"default": "",
"description": "Publication date (ISO 8601)",
"title": "Date",
"type": "string"
},
"tags": {
"description": "Topic tags assigned to the article",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"description": {
"default": "",
"description": "Article description or summary",
"title": "Description",
"type": "string"
},
"quality_score": {
"description": "Editorial quality score",
"title": "Quality Score",
"type": "number"
},
"quality_style": {
"default": "",
"description": "Editorial style category",
"title": "Quality Style",
"type": "string"
},
"quality_class": {
"default": "",
"description": "Editorial quality class",
"title": "Quality Class",
"type": "string"
}
},
"required": [
"slug",
"title",
"url",
"tags",
"quality_score"
],
"title": "ArticleSummary",
"type": "object"
}
},
"title": "list_articlesOutput"
}🟢get_article(slug)
Retrieve the full content of a blog article by its slug. Returns the article body (Markdown) plus metadata. If the slug does not match any article, returns an Article with `error='article_not_found'` and other fields at their defaults.
入力スキーマ
{
"type": "object",
"properties": {
"slug": {
"description": "Article slug as returned by search_blog (e.g. 'setup-llm-inference-setup'). Lower-case, hyphenated.",
"title": "Slug",
"type": "string"
}
},
"required": [
"slug"
],
"title": "get_articleArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"slug": {
"description": "Article slug",
"title": "Slug",
"type": "string"
},
"title": {
"default": "",
"description": "Article title",
"title": "Title",
"type": "string"
},
"url": {
"default": "",
"description": "Public URL of the article",
"title": "Url",
"type": "string"
},
"date": {
"default": "",
"description": "Publication date (ISO 8601)",
"title": "Date",
"type": "string"
},
"tags": {
"description": "Topic tags assigned to the article",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"description": {
"default": "",
"description": "Short article description",
"title": "Description",
"type": "string"
},
"body": {
"default": "",
"description": "Full article body in Markdown",
"title": "Body",
"type": "string"
},
"quality_score": {
"default": 0,
"description": "Build-time quality score from the editorial pipeline (unbounded weighted composite across 13 signals, higher is better; thresholds depend on style)",
"title": "Quality Score",
"type": "number"
},
"quality_style": {
"default": "",
"description": "Editorial style category (e.g. 'best_practice_learnings', 'werthaltige_code_beispiele'). Empty if not categorised.",
"title": "Quality Style",
"type": "string"
},
"quality_class": {
"default": "",
"description": "Editorial content class (e.g. 'Ephemeral', 'Evergreen'). Empty if not classified.",
"title": "Quality Class",
"type": "string"
},
"word_count": {
"default": 0,
"description": "Word count of the article body",
"title": "Word Count",
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Set to 'article_not_found' if no article matches the slug",
"title": "Error"
}
},
"required": [
"slug"
],
"description": "Full content of a single blog article.",
"title": "Article"
}🟢diagnose_sglang(attention_backend, mem_fraction, cuda_graph_max_bs, image_tag, hardware, ...)
Validate an SGLang configuration for NVIDIA DGX Spark (GB10/SM121A). Pure pattern-matching against known failure modes documented in the Sovereign AI Blog. No inference, no external calls. Returns critical issues, non-fatal warnings, and a recommended baseline config. All parameters are optional; supply only what you have. With no inputs you get the recommended config and a 'unknown' verdict.
入力スキーマ
{
"type": "object",
"properties": {
"attention_backend": {
"default": "",
"description": "SGLang --attention-backend value (e.g. 'flashinfer', 'triton'). Empty string = skip this check.",
"title": "Attention Backend",
"type": "string"
},
"mem_fraction": {
"default": 0,
"description": "SGLang --mem-fraction-static value (e.g. 0.88). 0.0 = skip this check.",
"maximum": 1,
"minimum": 0,
"title": "Mem Fraction",
"type": "number"
},
"cuda_graph_max_bs": {
"default": 0,
"description": "SGLang --cuda-graph-max-bs value. 0 = skip this check.",
"minimum": 0,
"title": "Cuda Graph Max Bs",
"type": "integer"
},
"image_tag": {
"default": "",
"description": "Docker image tag in use (e.g. 'lmsysorg/sglang:latest', 'lmsysorg/sglang:v0.4.0'). Empty = skip.",
"title": "Image Tag",
"type": "string"
},
"hardware": {
"default": "",
"description": "Hardware description (e.g. 'GB10', 'DGX Spark', 'SM121A'). Empty = skip GB10-specific rules.",
"title": "Hardware",
"type": "string"
},
"error_message": {
"default": "",
"description": "Paste error log output here for pattern matching against known failure modes.",
"title": "Error Message",
"type": "string"
}
},
"title": "diagnose_sglangArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"issues": {
"description": "Critical issues that will prevent SGLang from running correctly",
"items": {
"$ref": "#/$defs/DiagnosticIssue"
},
"title": "Issues",
"type": "array"
},
"warnings": {
"description": "Non-fatal warnings (suboptimal but non-blocking)",
"items": {
"$ref": "#/$defs/DiagnosticIssue"
},
"title": "Warnings",
"type": "array"
},
"recommended_config": {
"$ref": "#/$defs/RecommendedConfig",
"description": "Verified-good baseline config for GB10/SM121A"
},
"verdict": {
"description": "Overall verdict. 'unknown' = no inputs provided.",
"enum": [
"valid",
"valid_with_warnings",
"invalid",
"unknown"
],
"title": "Verdict",
"type": "string"
}
},
"required": [
"issues",
"warnings",
"recommended_config",
"verdict"
],
"$defs": {
"DiagnosticIssue": {
"description": "A single rule violation found in the SGLang config.",
"properties": {
"severity": {
"description": "critical = config will fail, warning = will run but suboptimal",
"enum": [
"critical",
"warning"
],
"title": "Severity",
"type": "string"
},
"param": {
"description": "The config parameter or input field that triggered the rule",
"title": "Param",
"type": "string"
},
"value": {
"description": "The offending value (stringified)",
"title": "Value",
"type": "string"
},
"problem": {
"description": "Plain-English explanation of the failure mode",
"title": "Problem",
"type": "string"
},
"fix": {
"description": "Concrete fix to apply",
"title": "Fix",
"type": "string"
},
"source": {
"description": "URL of the blog article documenting this issue",
"title": "Source",
"type": "string"
}
},
"required": [
"severity",
"param",
"value",
"problem",
"fix",
"source"
],
"title": "DiagnosticIssue",
"type": "object"
},
"RecommendedConfig": {
"description": "A known-good SGLang config baseline for GB10/SM121A hardware.",
"properties": {
"attention_backend": {
"description": "SGLang attention backend (triton is the verified default for GB10)",
"title": "Attention Backend",
"type": "string"
},
"mem_fraction": {
"description": "--mem-fraction-static value (0.75 is the upper safe bound for GB10)",
"title": "Mem Fraction",
"type": "number"
},
"cuda_graph_max_bs": {
"description": "--cuda-graph-max-bs (32 is the optimum for GB10)",
"title": "Cuda Graph Max Bs",
"type": "integer"
},
"image_tag": {
"description": "Docker image tag with SM121A support",
"title": "Image Tag",
"type": "string"
},
"env": {
"additionalProperties": true,
"description": "Environment variables required for stable operation",
"title": "Env",
"type": "object"
},
"max_running_requests": {
"description": "Concurrent request cap, calibrated for GB10 memory budget",
"title": "Max Running Requests",
"type": "integer"
}
},
"required": [
"attention_backend",
"mem_fraction",
"cuda_graph_max_bs",
"image_tag",
"env",
"max_running_requests"
],
"title": "RecommendedConfig",
"type": "object"
}
},
"description": "Outcome of a diagnose_sglang call.",
"title": "DiagnoseResult"
}🟢list_tags(sort)
List all topic tags used across the Sovereign AI Blog corpus, with article counts. Use this to browse the topic space before calling search_blog with a tag filter.
入力スキーマ
{
"type": "object",
"properties": {
"sort": {
"default": "count_desc",
"description": "Result ordering. 'count_desc' lists most-used tags first (default). 'alpha' sorts alphabetically.",
"enum": [
"count_desc",
"alpha"
],
"title": "Sort",
"type": "string"
}
},
"title": "list_tagsArguments"
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"items": {
"$ref": "#/$defs/TagInfo"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"$defs": {
"TagInfo": {
"description": "A topic tag with the number of articles using it.",
"properties": {
"tag": {
"description": "The tag name (lower-case, snake_case)",
"title": "Tag",
"type": "string"
},
"article_count": {
"description": "Number of articles tagged with this tag",
"title": "Article Count",
"type": "integer"
}
},
"required": [
"tag",
"article_count"
],
"title": "TagInfo",
"type": "object"
}
},
"title": "list_tagsOutput"
}推奨プロンプト
search_blogsearch_blogget_articleget_articlelist_articlesコミュニティ
エビデンス