VIVATLAS

mcp
Guvenlik Denetimi
Uyari
Health Uyari
  • License — License: NOASSERTION
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Uyari
  • network request — Outbound network request in extension/popup.js
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

A self-hosted catalogue for the skills, agents and tools in your Git repositories - search by meaning, browse cards, clip from any page. VIVATLAS views public repos; it does not own them.

README.md

VIVATLAS

A catalogue of skills, agents and tools from your Git repositories. Multi-user: everyone has their own sign-in, their own folders and sources; the shared catalogue is common to all.

VIVATLAS is a viewer, not an owner. It reads public Git repositories and helps you find and view the tools inside them. It does not own — and claims no rights in — any of the repositories, code, names or trademarks it catalogues or links to. Those belong to their authors and are governed by their own licenses.

License: Business Source License 1.1 — free to use, deploy and modify, including commercially; you may not sell or resell VIVATLAS itself (as a product or a hosted service). Converts to Apache-2.0 on 2030-07-21.

Access from AI assistants (MCP): docs/MCP.md. Deploy on TrueNAS: docs/DEPLOY-TRUENAS.md.

What already works

  • Card catalogue. One repository → one card: name, three levels of description (short / normal / technical), preview, tags (automatic, with source and confidence + manual, manual wins).
  • Search by words (SQLite FTS) and by meaning (vectors), bilingual — a Russian query finds an English tool.
  • Recommendations — three options for the task with an explanation, or an honest "nothing fits".
  • Folders — shared (run by the admin) and personal (everyone has their own); a card can be dragged into a folder. Git is untouched in the process.
  • Zones — a card is private or shared (in the catalogue); favourites, drafts, change feed and the "stale" feed.
  • People. Sign-in by password, the first to sign in becomes the owner. Invitations by link/email, open registration (toggle), two-step sign-in (TOTP + backup codes), password reset by email.
  • Account. Change email/password, deletion, profile photo (→ WebP) or an avatar from a ready-made set (classical busts), personal folders and sources.
  • Admin panel. People, access and invitations, shared folders, email (SMTP), integrations (addresses/tokens/models on top of .env, applied without a restart).
  • Interface. Custom rendering on the server, no build step. Languages: English (default), Russian, Hebrew (RTL). Themes: light / dark / OLED / system. Works from a phone too.
  • Sources. Gitea (shared and personal) and GitHub (an account's or organisation's public repositories), scanned daily and on demand. Failed AI summaries are retried automatically.
  • Adding. One door: a link, site, screenshot or reel → candidates with stars → plan → import. An address named by a model is always verified with the host.
  • Browser extension. A Chrome/Chromium extension (extension/) clips the current page or a pasted link into your catalogue, public or private, from any tab. See extension/README.md.
  • Upstream. A card remembers its source; upstream compares, update installs a new version only where you have not touched the file.
  • Outward. REST API and MCP server for AI assistants (MCP).

The main rule is unchanged: the program writes nothing to Git and does not scan private repositories. Reading public repositories only.

Running

python -m venv .venv
.venv/Scripts/python.exe -m pip install -e ".[dev]"    # Windows
# .venv/bin/python -m pip install -e ".[dev]"          # Linux

cp .env.example .env      # SECRET_KEY is required; Gitea address and keys are optional (can be set from the admin panel)

.venv/Scripts/python.exe -m vivatlas.cli init-db                       # create/update the database
.venv/Scripts/python.exe -m vivatlas.cli scan                          # fetch repositories
.venv/Scripts/python.exe -m vivatlas.cli serve --host 0.0.0.0 --port 8710

Opens at http://127.0.0.1:8710 (with --host 0.0.0.0 — also from a phone on the same network). The first person to go through /setup becomes the owner.

After updating the code, run init-db — it adds new columns to the database. serve does not run migrations: bring up new code on an old database and pages with missing fields will break.

Tests

.venv/Scripts/python.exe -m pytest
.venv/Scripts/python.exe -m ruff check src tests

Layout

src/vivatlas/
  config.py            settings from .env
  runtime_settings.py  overrides from the database on top of .env (edited from the admin panel)
  db.py                connection to SQLite
  models.py            tables
  migrate.py           init-db: add missing columns/indexes, rebuild search
  security.py          passwords, secret encryption, secret key
  twofactor.py         two-step sign-in (TOTP + backup codes)
  auth.py, auth_web.py sign-in, registration, invitations, password reset
  admin_web.py         admin panel (people, access, email, integrations)
  settings_web.py      personal settings, avatars, sources, folders
  web.py               catalogue, cards, adding
  api.py               app assembly, REST, /avatar, static
  filters.py           visibility: own + shared
  categories.py        folder permissions (shared/personal)
  i18n.py, translations*.py   translations (en/ru/he), RTL
  mailer.py            emails (password reset, invitations)
  avatars.py           uploaded photo → square WebP
  usericons.py         default avatar set (static/usericons)
  scanner.py, indexer.py  scanning + the private-repo rule, index
  mcp_server.py        MCP server for AI assistants
  cli.py               terminal commands (init-db, scan, serve, embed, upstream…)
  providers/
    base.py            common interface to the host (the "socket")
    gitea.py           Gitea
    github.py          GitHub (an account's public repositories)
  ext_api.py           JSON API for the browser extension (/api/ext)
  templates/, static/  pages and styles (custom app.css, no build step)

extension/             Chrome/Chromium extension (Manifest V3) — clip pages into VIVATLAS

Adding another host: implement the providers/base.py interface in a new provider and wire it in providers/__init__.py. The rest of the code stays the same.

Yorumlar (0)

Sonuc bulunamadi