NocoBase is an open-source, self-hosted alternative to Airtable and Retool that connects directly to SQL databases with a visual no-code builder.
NocoBase structures application logic around a TypeScript microkernel that connects directly to SQL databases including PostgreSQL and MySQL. The system lets organizations build operational software—from inventory logs to approval trackers—without exporting business data to external cloud providers. Instead of requiring developers for every interface update, it turns underlying tables into visual dashboards and forms.
Airtable locks records inside a proprietary hosted database, requiring third-party sync pipelines, Zapier tasks, or manual file imports to interact with production systems. Pushing internal records into Airtable duplicates sensitive data and subjects teams to monthly per-seat fees and strict row caps. When database schemas evolve, brittle synchronization scripts frequently fail, forcing staff to reconcile conflicting records across separate environments.
NocoBase takes an integrated approach by querying your existing databases directly. Through its Data Source Manager, administrators point the software at external PostgreSQL, MySQL, or REST endpoints without duplicating tables. Teams configure internal authentication, trigger webhooks, and expose collections to automation platforms under unified permissions. While Airtable offers one-click access to hundreds of consumer cloud integrations, NocoBase keeps business integrations native to your private infrastructure.
Can non-technical staff configure pages in NocoBase? Yes. Team members can create forms, adjust data tables, and set up automated email workflows using a visual interface that switches between live usage and layout editing with one click.
NocoBase vs Airtable — which tool fits better? Airtable suits distributed teams prioritizing instant setup and managed cloud integrations. NocoBase fits organizations that want their records stored directly in internal databases without per-seat pricing.
Can NocoBase connect to an existing database? Yes. Its data source manager connects directly to external PostgreSQL, MySQL, and MariaDB instances without altering table schemas.
NocoBase is a capable internal tool builder for organizations requiring direct database control and flexible visual customization. Maintained with regular updates through September 2026 and pairing an open-source core with commercial enterprise add-ons, it offers an effective platform for teams ready to run their own containers.
We started this exact setup from scratch in a clean Linux machine on Nov 1, 2026 and checked it through NocoBase's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p nocobase && cd nocobase
curl -fsSL https://open-source.store/tools/nocobase/compose.yml -o compose.ymlcat > .env <<EOF
APP_KEY=$(openssl rand -hex 32)
POSTGRES_PASSWORD=$(openssl rand -hex 12)
[email protected]
ADMIN_PASSWORD=$(openssl rand -hex 12)
EOFAPP_KEY — Secret key used to generate tokens and secure application data. Generated above; keep it secret.POSTGRES_PASSWORD — Password of the bundled PostgreSQL database. Generated above; keep it secret.ADMIN_EMAIL — Email address for the initial root administrator account.ADMIN_PASSWORD — Password for the initial root administrator account. Generated above; keep it secret.docker compose up -dservices:
app:
image: nocobase/nocobase:2.2.37-full
restart: always
environment:
APP_KEY: ${APP_KEY}
DB_DIALECT: postgres
DB_HOST: postgres
DB_PORT: 5432
DB_DATABASE: nocobase
DB_USER: nocobase
DB_PASSWORD: ${POSTGRES_PASSWORD}
TZ: Etc/UTC
INIT_ROOT_EMAIL: ${ADMIN_EMAIL}
INIT_ROOT_PASSWORD: ${ADMIN_PASSWORD}
INIT_ROOT_NICKNAME: Administrator
INIT_APP_LANG: en-US
ports:
- "13000:80"
depends_on:
postgres:
condition: service_healthy
volumes:
- nocobase-data:/app/nocobase/storage
postgres:
image: postgres:16-alpine
restart: always
command: postgres -c wal_level=logical
environment:
POSTGRES_USER: nocobase
POSTGRES_DB: nocobase
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- nocobase-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nocobase -d nocobase"]
interval: 5s
timeout: 5s
retries: 5
volumes:
nocobase-data:
nocobase-db-data:
Go, gRPC and Protobuf done right, LLM agents in production, and the hard parts of shipping a first product.
Show that NocoBase is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 122 s: postgres:16-alpine, nocobase/nocobase:2.2.37-full.
Based on the upstream setup. Official Docker Compose setup with PostgreSQL using the upstream-recommended full image (includes database clients and LibreOffice for backup/migration plugins and PDF template printing). Pinned images to 2.2.37-full and 16-alpine; database password, admin credentials, and application key moved to environment variables.
app-1 | 2026-11-01T04:59:46.543183257Z at collectionToResource (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:153:16)
app-1 | 2026-11-01T04:59:46.543185007Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543186632Z at /app/nocobase/node_modules/koa-compose/index.js:34:12
app-1 | 2026-11-01T04:59:46.543188465Z at /app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:109:120
app-1 | 2026-11-01T04:59:46.543190090Z at dataSourceManager (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source-manager.js:103:14)
app-1 | 2026-11-01T04:59:46.543192424Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543193965Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:178:18)
app-1 | 2026-11-01T04:59:46.543226590Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543229757Z at handleFileAccess (/app/nocobase/node_modules/@nocobase/plugin-file-manager/dist/server/file-access.js:78:14)
app-1 | 2026-11-01T04:59:46.543231549Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543233132Z at legacyFileAccess (/app/nocobase/node_modules/@nocobase/server/lib/helper.js:184:16)
app-1 | 2026-11-01T04:59:46.543234757Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543236382Z at dataWrapping (/app/nocobase/node_modules/@nocobase/server/lib/middlewares/data-wrapping.js:48:11)
app-1 | 2026-11-01T04:59:46.543238132Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543240132Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:87:17)
app-1 | 2026-11-01T04:59:46.543241715Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.543243215Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-idp-oauth/dist/server/plugin.js:90:15)
app-1 | 2026-11-01T04:59:46.543244840Z at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
app-1 | 2026-11-01T04:59:46.543246424Z at async cors (/app/nocobase/node_modules/@koa/cors/index.js:64:16)]
app-1 | 2026-11-01T04:59:46.543467132Z {"level":"warn","message":"response /api/project","method":"GET","path":"/api/project","action":{},"status":404,"cost":2,"app":"main","reqId":"a0117e9e-faaa-4fe9-adb5-c51a7286bdbb","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.545881549Z {"level":"info","message":"request GET /api/modular-connector/login/dtalf/?origin=mo&type=foo","method":"GET","path":"/api/modular-connector/login/dtalf/?origin=mo&type=foo","req":{},"app":"main","reqId":"0ab24ca5-a03b-490a-bdb4-10cb036ee130","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.545901174Z [Error: modular-connector.dtalf resource does not exist
app-1 | 2026-11-01T04:59:46.545903257Z at _Resourcer.getResource (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:176:13)
app-1 | 2026-11-01T04:59:46.545905007Z at resourcerMiddleware (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:225:31)
app-1 | 2026-11-01T04:59:46.545906215Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545907340Z at collectionToResource (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:153:16)
app-1 | 2026-11-01T04:59:46.545908924Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545910382Z at /app/nocobase/node_modules/koa-compose/index.js:34:12
app-1 | 2026-11-01T04:59:46.545911715Z at /app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:109:120
app-1 | 2026-11-01T04:59:46.545913215Z at dataSourceManager (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source-manager.js:103:14)
app-1 | 2026-11-01T04:59:46.545914465Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545915590Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:178:18)
app-1 | 2026-11-01T04:59:46.545917049Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545918174Z at handleFileAccess (/app/nocobase/node_modules/@nocobase/plugin-file-manager/dist/server/file-access.js:78:14)
app-1 | 2026-11-01T04:59:46.545919632Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545920715Z at legacyFileAccess (/app/nocobase/node_modules/@nocobase/server/lib/helper.js:184:16)
app-1 | 2026-11-01T04:59:46.545963049Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545967174Z at dataWrapping (/app/nocobase/node_modules/@nocobase/server/lib/middlewares/data-wrapping.js:48:11)
app-1 | 2026-11-01T04:59:46.545968507Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545969924Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:87:17)
app-1 | 2026-11-01T04:59:46.545971382Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.545972465Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-idp-oauth/dist/server/plugin.js:90:15)
app-1 | 2026-11-01T04:59:46.545973590Z at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
app-1 | 2026-11-01T04:59:46.545975382Z at async cors (/app/nocobase/node_modules/@koa/cors/index.js:64:16)]
app-1 | 2026-11-01T04:59:46.546263924Z {"level":"warn","message":"response /api/modular-connector/login/dtalf/?origin=mo&type=foo","method":"GET","path":"/api/modular-connector/login/dtalf/?origin=mo&type=foo","action":{},"status":404,"cost":1,"app":"main","reqId":"0ab24ca5-a03b-490a-bdb4-10cb036ee130","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.548051382Z {"level":"info","message":"request GET /api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","method":"GET","path":"/api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","req":{},"app":"main","reqId":"d68621cf-bc0a-432d-a789-1b60869ce130","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.551803715Z [Error: portalTsLogin.getE9DevelopAllNameValue2 resource does not exist
app-1 | 2026-11-01T04:59:46.551831507Z at _Resourcer.getResource (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:176:13)
app-1 | 2026-11-01T04:59:46.551833924Z at resourcerMiddleware (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:225:31)
app-1 | 2026-11-01T04:59:46.551835382Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551836382Z at collectionToResource (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:153:16)
app-1 | 2026-11-01T04:59:46.551837507Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551838465Z at /app/nocobase/node_modules/koa-compose/index.js:34:12
app-1 | 2026-11-01T04:59:46.551839924Z at /app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:109:120
app-1 | 2026-11-01T04:59:46.551840965Z at dataSourceManager (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source-manager.js:103:14)
app-1 | 2026-11-01T04:59:46.551842007Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551843340Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:178:18)
app-1 | 2026-11-01T04:59:46.551844715Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551845674Z at handleFileAccess (/app/nocobase/node_modules/@nocobase/plugin-file-manager/dist/server/file-access.js:78:14)
app-1 | 2026-11-01T04:59:46.551846715Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551847632Z at legacyFileAccess (/app/nocobase/node_modules/@nocobase/server/lib/helper.js:184:16)
app-1 | 2026-11-01T04:59:46.551848840Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551849840Z at dataWrapping (/app/nocobase/node_modules/@nocobase/server/lib/middlewares/data-wrapping.js:48:11)
app-1 | 2026-11-01T04:59:46.551851174Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551852132Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:87:17)
app-1 | 2026-11-01T04:59:46.551853090Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.551854049Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-idp-oauth/dist/server/plugin.js:90:15)
app-1 | 2026-11-01T04:59:46.551863340Z at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
app-1 | 2026-11-01T04:59:46.551864799Z at async cors (/app/nocobase/node_modules/@koa/cors/index.js:64:16)]
app-1 | 2026-11-01T04:59:46.551867215Z {"level":"warn","message":"response /api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","method":"GET","path":"/api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","action":{},"status":404,"cost":1,"app":"main","reqId":"d68621cf-bc0a-432d-a789-1b60869ce130","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.553788965Z {"level":"info","message":"request GET /api/raster/search/?band=1)%20AND%201=CAST((SELECT%20version())%20AS%20INT)--","method":"GET","path":"/api/raster/search/?band=1)%20AND%201=CAST((SELECT%20version())%20AS%20INT)--","req":{},"app":"main","reqId":"1e271519-acfc-4431-81be-5d9a1abe425e","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.554759007Z [Error: raster resource does not exist
app-1 | 2026-11-01T04:59:46.554765340Z at _Resourcer.getResource (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:176:13)
app-1 | 2026-11-01T04:59:46.554767090Z at resourcerMiddleware (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:225:31)
app-1 | 2026-11-01T04:59:46.554768674Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554770174Z at collectionToResource (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:153:16)
app-1 | 2026-11-01T04:59:46.554771965Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554773090Z at /app/nocobase/node_modules/koa-compose/index.js:34:12
app-1 | 2026-11-01T04:59:46.554774215Z at /app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:109:120
app-1 | 2026-11-01T04:59:46.554775715Z at dataSourceManager (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source-manager.js:103:14)
app-1 | 2026-11-01T04:59:46.554776882Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554778257Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:178:18)
app-1 | 2026-11-01T04:59:46.554779424Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554780549Z at handleFileAccess (/app/nocobase/node_modules/@nocobase/plugin-file-manager/dist/server/file-access.js:78:14)
app-1 | 2026-11-01T04:59:46.554796632Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554798757Z at legacyFileAccess (/app/nocobase/node_modules/@nocobase/server/lib/helper.js:184:16)
app-1 | 2026-11-01T04:59:46.554800132Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554801590Z at dataWrapping (/app/nocobase/node_modules/@nocobase/server/lib/middlewares/data-wrapping.js:48:11)
app-1 | 2026-11-01T04:59:46.554802799Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554818007Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:87:17)
app-1 | 2026-11-01T04:59:46.554822882Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.554824215Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-idp-oauth/dist/server/plugin.js:90:15)
app-1 | 2026-11-01T04:59:46.554825424Z at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
app-1 | 2026-11-01T04:59:46.554826590Z at async cors (/app/nocobase/node_modules/@koa/cors/index.js:64:16)]
app-1 | 2026-11-01T04:59:46.555147090Z {"level":"warn","message":"response /api/raster/search/?band=1)%20AND%201=CAST((SELECT%20version())%20AS%20INT)--","method":"GET","path":"/api/raster/search/?band=1)%20AND%201=CAST((SELECT%20version())%20AS%20INT)--","action":{},"status":404,"cost":1,"app":"main","reqId":"1e271519-acfc-4431-81be-5d9a1abe425e","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.556148424Z {"level":"info","message":"request GET /api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","method":"GET","path":"/api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","req":{},"app":"main","reqId":"6c569470-19bc-4f78-9b6f-5c558b614feb","timestamp":"2026-11-01 04:59:46"}
app-1 | 2026-11-01T04:59:46.557037924Z [Error: portalTsLogin.getE9DevelopAllNameValue2 resource does not exist
app-1 | 2026-11-01T04:59:46.557042840Z at _Resourcer.getResource (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:176:13)
app-1 | 2026-11-01T04:59:46.557044590Z at resourcerMiddleware (/app/nocobase/node_modules/@nocobase/resourcer/lib/resourcer.js:225:31)
app-1 | 2026-11-01T04:59:46.557046215Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557047382Z at collectionToResource (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:153:16)
app-1 | 2026-11-01T04:59:46.557048674Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557049799Z at /app/nocobase/node_modules/koa-compose/index.js:34:12
app-1 | 2026-11-01T04:59:46.557050924Z at /app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source.js:109:120
app-1 | 2026-11-01T04:59:46.557052132Z at dataSourceManager (/app/nocobase/node_modules/@nocobase/data-source-manager/lib/data-source-manager.js:103:14)
app-1 | 2026-11-01T04:59:46.557053257Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557054340Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:178:18)
app-1 | 2026-11-01T04:59:46.557055590Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557056715Z at handleFileAccess (/app/nocobase/node_modules/@nocobase/plugin-file-manager/dist/server/file-access.js:78:14)
app-1 | 2026-11-01T04:59:46.557057882Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557059007Z at legacyFileAccess (/app/nocobase/node_modules/@nocobase/server/lib/helper.js:184:16)
app-1 | 2026-11-01T04:59:46.557060090Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557066715Z at dataWrapping (/app/nocobase/node_modules/@nocobase/server/lib/middlewares/data-wrapping.js:48:11)
app-1 | 2026-11-01T04:59:46.557068174Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557069299Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-mcp-server/dist/server/plugin.js:87:17)
app-1 | 2026-11-01T04:59:46.557077174Z at dispatch (/app/nocobase/node_modules/koa-compose/index.js:42:32)
app-1 | 2026-11-01T04:59:46.557078882Z at app.use.tag (/app/nocobase/node_modules/@nocobase/plugin-idp-oauth/dist/server/plugin.js:90:15)
app-1 | 2026-11-01T04:59:46.557080132Z at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
app-1 | 2026-11-01T04:59:46.557081257Z at async cors (/app/nocobase/node_modules/@koa/cors/index.js:64:16)]
app-1 | 2026-11-01T04:59:46.557105424Z {"level":"warn","message":"response /api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","method":"GET","path":"/api/portalTsLogin/utils/getE9DevelopAllNameValue2?fileName=portaldev_%2f%2e%2e%2fweaver%2eproperties","action":{},"status":404,"cost":1,"app":"main","reqId":"6c569470-19bc-4f78-9b6f-5c558b614feb","timestamp":"2026-11-01 04:59:46"}