Noema

Noema

Noema MCP server enables AI clients to interact with a personal task management and knowledge workspace, supporting operations on tasks, notes, documents, links, and more.

Category
访问服务器

README

Noema

νοήματος — that which is held in mind.

Noema is a small, self-hosted personal workspace built around one deliberate constraint: only yesterday, today, and tomorrow matter on the active task board.

[!IMPORTANT] Noema is published as a reference application and a starting point for customization. It is not intended to be installed and used unchanged as a universal productivity product. Fork it, rename the modules, remove what you do not need, change the data model, and adapt the interface to your own work and habits.

Noema is written in vanilla Node.js, stores structured records in a local encrypted SQLite database, and exposes the same data to its web interface, MCP clients, OpenAPI-compatible agents, Siri Shortcuts, and other tools.

The three-day idea

Most task managers accumulate an increasingly large backlog. Noema deliberately keeps the active surface small:

  • Yesterday shows what was scheduled one day ago.
  • Today is the current working list.
  • Tomorrow is the immediate next step.
  • A task older than yesterday disappears from the three-column board, but it is not deleted. It remains available in Archive, together with its original date and completion state.

This makes the main screen a short-term attention window rather than a permanent database. Archive keeps the full history without allowing old tasks to dominate the daily interface.

Noema task board

What is included

Task board

The home page is the core of Noema. Tasks are grouped into yesterday, today, and tomorrow, with priority, optional time, subtasks, drag-and-drop ordering, completion state, and recurring schedules.

The current implementation is intentionally opinionated. A fork can easily change the window to seven days, projects, contexts, people, rooms, construction phases, or any other grouping.

Archive

Archive is the long-term memory of the application. Tasks that leave the three-day board remain here instead of being destroyed. The calendar also surfaces dates containing notes, documents, saved links, and snapshots.

Notes

Notes are lightweight checklist-style records for information that is more structured than a task but does not need a full document. They support titles, body content, labels, pinning, archiving, and checklist items.

Possible adaptations include meeting notes, shopping lists, punch lists, inspection lists, recipes, recurring procedures, or quick client briefs.

Documents

Documents are longer rich-text records with labels and file uploads. They are useful for specifications, project briefs, decisions, instructions, reports, contracts, research, or any content that should live beside the daily workflow.

The document module is deliberately simple and can be replaced with Markdown, a different database-backed editor, object storage, collaborative editing, or an external document service.

Links

Links is a personal link inbox. A URL can be saved with its title, description, preview image, label, archive state, and searchable metadata. Noema can collect links through the browser bookmarklet, iOS/macOS Shortcuts, REST, MCP, or OpenAPI tools.

This module can become a reading list, research library, product catalog, client references, supplier directory, property shortlist, or any other URL-based collection.

AI Projects

AI Projects is a separate link collection for prompts, conversations, experiments, tools, repositories, and ongoing AI work. It demonstrates how one storage module can expose multiple purpose-specific collections.

A fork can rename it to Research, Clients, Cases, Opportunities, Resources, or remove it entirely.

Inspiration

Inspiration is an image-first reference library with multi-image collections, thumbnails, labels, address/source fields, filtering, search, and a selectable cover image.

It was designed for architectural and design references, but the same module can store materials, furniture, art, fashion, recipes, products, travel ideas, visual research, mood boards, or any other image collection.

Building Sites

Building Sites is a location-aware photo journal. Each entry can contain a title, location, address, coordinates, documentation link, label, hashtags, multiple images, image notes, and hotspots.

The name reflects the original use case, not a technical limitation. The module can be repurposed for:

  • renovation or maintenance progress;
  • field inspections and site visits;
  • properties and real-estate listings;
  • warehouses, equipment, or inventory locations;
  • events and travel journals;
  • deliveries, installations, defects, or service records;
  • any collection that combines a place, photos, tags, and chronological observations.

Storage, backup, and snapshots

Structured records are stored in data/noema.sqlite. Record payloads remain protected with AES-256-GCM before they are written to SQLite. Existing encrypted JSON files are imported automatically on first start and continue to be updated as rollback and backup mirrors.

Backup provides JSON export/import, archive downloads, local metadata snapshots, storage statistics, and snapshot restore. Metadata snapshots cover every structured module but intentionally exclude uploaded media; use the full ZIP archive for a complete media backup. Application data and uploaded media live in the local data/ directory, which is excluded from Git.

The full ZIP archive feature uses the system zip command. It is installed by the included Dockerfile; direct Node.js deployments need zip available on the host. JSON export and import do not require it.

Read SQLITE_MIGRATION.md before upgrading an existing installation. It documents automatic import, encryption, backup behavior, and rollback to an older commit.

This implementation is suitable for a single-user self-hosted application. Production forks should define their own retention, off-site backup, encryption-key recovery, and disaster-recovery policies.

Stats and SEO dashboard

Stats is an optional example dashboard for Google Analytics 4, Search Console, and PageSpeed data. The public version uses environment-based project configuration and contains no personal domains or property IDs.

It can be removed or adapted for sales, health, finance, home automation, server monitoring, project KPIs, or any other metrics.

Help, authentication, and integrations

Noema also includes:

  • a built-in Help page;
  • optional password protection for the web UI;
  • bearer-token protection for machine tools;
  • encrypted SQLite record payloads and encrypted JSON compatibility mirrors;
  • optional read-only Google Calendar integration;
  • an MCP endpoint for compatible AI clients;
  • an auto-generated OpenAPI 3.1 document;
  • health and system-status endpoints.

Screenshots

The public application is served in English. public/noema-i18n.js localizes interface chrome and date formatting while explicitly excluding task titles, notes, documents, links, and other user-created content. Screenshots are generated from neutral demo data by scripts/capture-screenshots.mjs; they never use a personal data/ directory.

Page Preview
Task board Task board
Archive Archive
Notes Notes
Documents Documents
Links Links
AI Projects AI Projects
Inspiration Inspiration
Building Sites Building Sites
Backup Backup
Stats Stats
Help Help
Login Login
Not found 404

Quick start

Requirements: Node.js 22.16.0 or newer. The included Docker image uses Node.js 24. The optional full ZIP archive-backup feature also needs the system zip command; the Docker image already provides it.

git clone https://github.com/vladimirperovic/noema.git
cd noema
cp .env.example .env
node src/index.js

Open http://localhost:3000.

No build step or npm dependency installation is required.

Configuration

Variable Default Purpose
PORT 3000 HTTP port
HOST 0.0.0.0 Bind address
PUBLIC_BASE_URL http://localhost:3000 Public URL used by OpenAPI and OAuth
NOEMA_API_TOKEN empty Bearer token for MCP, OpenAPI tools, and machine access
UI_PASSWORD empty Password protecting the browser UI
ENCRYPTION_KEY empty Passphrase used to derive the local data-encryption key
NOEMA_TIMEZONE UTC IANA timezone used for date boundaries
NOEMA_DATA_DIR ./data SQLite, JSON mirrors, uploads, snapshots, tokens, and local encryption-key directory
NOEMA_CORS_ORIGIN * Allowed browser origin(s)
NOEMA_HTTP_USER_AGENT generic Noema identifier Operator contact sent to services that require an identifiable user agent
NOEMA_ANALYTICS_PROJECTS empty JSON array defining optional analytics projects
GOOGLE_CLIENT_ID empty Optional Google Calendar OAuth client ID
GOOGLE_CLIENT_SECRET empty Optional Google Calendar OAuth client secret
GOOGLE_CALENDAR_ID primary Calendar to read
GOOGLE_REFRESH_TOKEN empty Optional manually supplied refresh token
GA4_CLIENT_EMAIL empty Optional Google service-account email
GA4_PRIVATE_KEY empty Optional Google service-account private key
PAGESPEED_API_KEY empty Optional PageSpeed API key

See .env.example for explanations and examples.

MCP and OpenAPI

  • MCP endpoint: POST /mcp
  • OpenAPI document: GET /openapi.json
  • Tool REST bridge: POST /api/tools/<tool-name>

Example MCP configuration:

{
  "mcpServers": {
    "noema": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

Project structure

src/
  config.js              environment parsing and validation
  core/                  auth, MCP, OpenAPI, validation, shared utilities
  modules/               registered tools
  services/              optional external services and analytics
  store/                 shared encrypted SQLite collections and media stores
  server.js              HTTP, REST, static files, uploads, backup
public/                   browser interface
scripts/                  maintenance and screenshot tooling
test/                     Node.js tests
docs/                     architecture, customization, and screenshots
data/                     SQLite, encrypted mirrors, uploads, and keys; never committed

Customize before deployment

At minimum, review:

  1. module names and navigation;
  2. the three-day task behavior;
  3. authentication and reverse-proxy settings;
  4. backup and encryption-key recovery;
  5. external integrations;
  6. demo content and screenshots;
  7. privacy, retention, and access requirements for your deployment.

Read CUSTOMIZATION.md, DEPLOYMENT.md, PRIVACY.md, and SECURITY.md before exposing a fork to the internet.

Development

npm run check

The check command validates the main JavaScript files and runs the complete test suite, including SQLite import, encryption, persistence, and rollback-mirror coverage.

Documentation

License

MIT © Vladimir Perović. See LICENSE.

The software is provided as is, without warranty. The repository is a customizable reference implementation, not a hosted service or supported commercial product.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选