{
  "openapi": "3.1.0",
  "info": {
    "title": "afedin.online public content",
    "version": "2026-10-15",
    "summary": "Static public profile, catalogs and connection metadata; separate Russian address MCP / Российские адреса.",
    "description": "Public HTTP resources listed in /resources.json are anonymous, read-only GETs. /profile.json is the canonical published profile; /resources.json is the canonical catalog. The HTML homepage also registers get-profile and list-site-resources as WebMCP browser tools when supported; they read the same JSON files. Send Accept: text/markdown to the deployed homepage for Markdown. Content signals in /robots.txt apply: search=yes, ai-input=yes, ai-train=no. This OpenAPI describes static public GET resources, including /gar-mcp.json connection metadata. The separate /mcp/gar endpoint uses MCP Streamable HTTP and JSON-RPC; obtain its tool contracts through MCP tools/list. It is not modeled as REST operations here. Российские адреса доступны через отдельный MCP, сейчас только частичная выборка Адыгеи (регион 01), 228787 выбранных объектов, источник 2026.09.29; не вся Россия.",
    "contact": {
      "name": "Alex Fedin",
      "url": "https://www.linkedin.com/in/afedin/"
    }
  },
  "servers": [
    {
      "url": "https://afedin.online"
    }
  ],
  "paths": {
    "/": {
      "get": {
        "operationId": "getHomepage",
        "summary": "Brief personal introduction and agent entry: HTML or Markdown",
        "responses": {
          "200": {
            "description": "The homepage. The representation depends on the Accept header.",
            "headers": {
              "Vary": {
                "schema": {
                  "type": "string"
                },
                "description": "Accept"
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/index.md": {
      "get": {
        "operationId": "getHomepageMarkdown",
        "summary": "Markdown twin of the homepage",
        "responses": {
          "200": {
            "description": "Markdown",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsTxt",
        "summary": "Short Markdown index of the site for LLM tools",
        "responses": {
          "200": {
            "description": "Markdown",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/auth.md": {
      "get": {
        "operationId": "getAuthMd",
        "summary": "Access rules for public catalog resources",
        "responses": {
          "200": {
            "description": "Markdown",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/robots.txt": {
      "get": {
        "operationId": "getRobotsTxt",
        "summary": "Crawl rules, AI crawler groups and Content-Signal",
        "responses": {
          "200": {
            "description": "Plain text",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemap",
        "summary": "Sitemap of canonical URLs",
        "responses": {
          "200": {
            "description": "XML sitemap",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/ai-catalog.json": {
      "get": {
        "operationId": "getAiCatalog",
        "summary": "AI Catalog manifest (specVersion 1.0)",
        "responses": {
          "200": {
            "description": "AI Catalog manifest",
            "content": {
              "application/ai-catalog+json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "operationId": "getApiCatalog",
        "summary": "RFC 9727 API catalog (linkset) pointing to this document",
        "responses": {
          "200": {
            "description": "Linkset",
            "content": {
              "application/linkset+json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/agent-skills/index.json": {
      "get": {
        "operationId": "getAgentSkillsIndex",
        "summary": "Agent Skills Discovery index",
        "responses": {
          "200": {
            "description": "Skills index",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/profile.json": {
      "get": {
        "operationId": "getPublicProfile",
        "summary": "Canonical public profile of Alex Fedin",
        "responses": {
          "200": {
            "description": "Canonical public profile of Alex Fedin",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profile"
                }
              }
            }
          }
        }
      }
    },
    "/resources.json": {
      "get": {
        "operationId": "getPublicResources",
        "summary": "Canonical public site resource catalog",
        "responses": {
          "200": {
            "description": "Canonical public site resource catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceCatalog"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "summary": "OpenAPI 3.1 endpoints and JSON output schemas",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 endpoints and JSON output schemas",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/agent-skills/afedin-site/SKILL.md": {
      "get": {
        "operationId": "getAgentGuide",
        "summary": "Agent guide and browser tool contracts",
        "responses": {
          "200": {
            "description": "Markdown agent guide",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/gar-mcp.json": {
      "get": {
        "operationId": "getRussianAddressMcpConnection",
        "summary": "Russian address MCP connection metadata / Российские адреса: подключение MCP",
        "description": "Static connection information. Address tool calls use MCP JSON-RPC at /mcp/gar, not this GET resource.",
        "responses": {
          "200": {
            "description": "MCP connection information and truthful partial coverage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GarMcpConnection"
                }
              }
            }
          }
        }
      }
    }
  },
  "security": [],
  "components": {
    "schemas": {
      "Profile": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "url",
          "description",
          "email",
          "profiles"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "profiles": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "linkedin",
              "github",
              "x"
            ],
            "properties": {
              "linkedin": {
                "type": "string",
                "format": "uri"
              },
              "github": {
                "type": "string",
                "format": "uri"
              },
              "x": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      },
      "Resource": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "url",
          "type",
          "description"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "type": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      },
      "ResourceCatalog": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "site",
          "resources"
        ],
        "properties": {
          "site": {
            "type": "string",
            "format": "uri"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Resource"
            }
          }
        }
      },
      "GarMcpConnection": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "endpoint",
          "protocol",
          "transport",
          "authentication",
          "read_only",
          "documentation_url",
          "source",
          "dataset_version",
          "coverage",
          "connection_en",
          "connection_ru",
          "tools",
          "limitations"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "endpoint": {
            "const": "https://afedin.online/mcp/gar"
          },
          "protocol": {
            "const": "MCP"
          },
          "transport": {
            "const": "streamable_http"
          },
          "authentication": {
            "const": "none"
          },
          "read_only": {
            "const": true
          },
          "documentation_url": {
            "type": "string"
          },
          "source": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "name",
              "version",
              "official_source"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              },
              "official_source": {
                "type": "boolean"
              }
            }
          },
          "dataset_version": {
            "type": "string"
          },
          "coverage": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "scope",
              "region_codes",
              "region_en",
              "region_ru",
              "selected_objects",
              "partial_coverage",
              "federal_coverage",
              "complete_regional_coverage"
            ],
            "properties": {
              "scope": {
                "type": "string"
              },
              "region_codes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "region_en": {
                "type": "string"
              },
              "region_ru": {
                "type": "string"
              },
              "selected_objects": {
                "type": "integer",
                "minimum": 1
              },
              "partial_coverage": {
                "const": true
              },
              "federal_coverage": {
                "const": false
              },
              "complete_regional_coverage": {
                "const": false
              }
            }
          },
          "connection_en": {
            "type": "string"
          },
          "connection_ru": {
            "type": "string"
          },
          "tools": {
            "type": "array",
            "minItems": 3,
            "maxItems": 3,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "name",
                "description_en",
                "description_ru"
              ],
              "properties": {
                "name": {
                  "enum": [
                    "gar_dataset_status",
                    "gar_get_address",
                    "gar_search_addresses"
                  ]
                },
                "description_en": {
                  "type": "string"
                },
                "description_ru": {
                  "type": "string"
                }
              }
            }
          },
          "limitations": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "en",
              "ru"
            ],
            "properties": {
              "en": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ru": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
}
