datanotes 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +1 -0
  2. package/SECURITY.md +12 -0
  3. package/dist/api/client.d.cts +2 -0
  4. package/dist/api/client.d.ts +2 -0
  5. package/dist/api/docs.d.cts +14 -4
  6. package/dist/api/docs.d.ts +14 -4
  7. package/dist/api/extension-files.d.cts +23 -0
  8. package/dist/api/extension-files.d.ts +23 -0
  9. package/dist/api/extension-host.d.cts +108 -0
  10. package/dist/api/extension-host.d.ts +108 -0
  11. package/dist/api/extension-manifest.d.cts +154 -0
  12. package/dist/api/extension-manifest.d.ts +154 -0
  13. package/dist/api/extension-plan.d.cts +174 -0
  14. package/dist/api/extension-plan.d.ts +174 -0
  15. package/dist/api/extension-record.d.cts +65 -0
  16. package/dist/api/extension-record.d.ts +65 -0
  17. package/dist/api/extension-sdk.d.cts +65 -0
  18. package/dist/api/extension-sdk.d.ts +65 -0
  19. package/dist/api/extensions.cjs +19660 -0
  20. package/dist/api/extensions.d.cts +11 -0
  21. package/dist/api/extensions.d.ts +11 -0
  22. package/dist/api/extensions.js +19597 -0
  23. package/dist/api/index.cjs +1568 -375
  24. package/dist/api/index.js +1568 -375
  25. package/dist/api/mcp.cjs +1238 -27
  26. package/dist/api/mcp.js +1238 -27
  27. package/dist/datanotes.cjs +8365 -4335
  28. package/dist/docs/administration/extensions.md +213 -0
  29. package/dist/docs/api/operations/alter_table.md +4 -3
  30. package/dist/docs/api/operations/extensions_delete.md +29 -0
  31. package/dist/docs/api/operations/extensions_list.md +20 -0
  32. package/dist/docs/api/operations/extensions_record.md +44 -0
  33. package/dist/docs/api/operations/tags/extensions.md +9 -0
  34. package/dist/docs/api.md +9 -1
  35. package/dist/docs/develop/write-an-extension.md +369 -0
  36. package/dist/docs/guides/data-quality/check-constraints.md +10 -10
  37. package/dist/docs/guides/data-quality/hand-edits.md +8 -8
  38. package/dist/docs/guides/database-objects/bases.md +11 -11
  39. package/dist/docs/guides/database-objects/catalogs-and-schemas.md +30 -10
  40. package/dist/docs/guides/database-objects/columns.md +38 -38
  41. package/dist/docs/guides/database-objects/relations.md +28 -28
  42. package/dist/docs/guides/database-objects/tables.md +167 -43
  43. package/dist/docs/guides/database-objects/views.md +44 -44
  44. package/dist/docs/guides/history/change-data-feed.md +34 -34
  45. package/dist/docs/guides/history/journal-and-undo.md +12 -12
  46. package/dist/docs/guides/history/restore.md +20 -20
  47. package/dist/docs/guides/history/table-history.md +31 -31
  48. package/dist/docs/guides/read-and-write/automatic-links.md +15 -15
  49. package/dist/docs/guides/read-and-write/import-notes.md +20 -20
  50. package/dist/docs/guides/read-and-write/joins-and-aggregates.md +7 -7
  51. package/dist/docs/guides/read-and-write/read-and-filter.md +10 -10
  52. package/dist/docs/guides/read-and-write/write-rows.md +10 -10
  53. package/dist/docs/guides/search/text.md +1 -1
  54. package/dist/docs/guides/security/security-model.md +12 -0
  55. package/dist/docs/reference/cli.md +32 -1
  56. package/dist/docs/reference/glossary.md +8 -0
  57. package/dist/docs/reference/operations/auxiliary.md +1 -1
  58. package/dist/docs/reference/operations/rows.md +1 -1
  59. package/dist/docs/reference/operations/schema.md +3 -3
  60. package/dist/docs/reference/operations.md +4 -4
  61. package/dist/docs/release-notes.md +49 -0
  62. package/dist/docs/start/connect-agents.md +11 -0
  63. package/package.json +11 -1
@@ -16,7 +16,7 @@ Operations that define the database: tables, columns, constraints, bases and vie
16
16
  | [`drop_table`](https://datanotes.dev/reference/operations/schema/#drop_table) | Drop a table. | [Tables](https://datanotes.dev/guides/database-objects/tables/) |
17
17
  | [`alter_table`](https://datanotes.dev/reference/operations/schema/#alter_table) | Alter a table: move it (`catalog`, `schema`), rename it (`name`), change `partition` / `filename` patterns, `description` (changes, never goes: “” is refused), `aliases`, `exclude` folders, `row_template` (“” removes it), `instructions` (how to fill a row, for agents; “” removes them), `history` (true \| false \| “default”), `autolink_target` (true \| false \| “default”: may automatic links link its rows? default: yes, unless its rows are named by a date or a time) or `tags` (key/value labels merged into the table’s, e.g. | [Catalogs, schemas and the database](https://datanotes.dev/guides/database-objects/catalogs-and-schemas/), [Tables](https://datanotes.dev/guides/database-objects/tables/), [Automatic links](https://datanotes.dev/guides/read-and-write/automatic-links/), [Import existing notes](https://datanotes.dev/guides/read-and-write/import-notes/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/) |
18
18
  | [`clone_table`](https://datanotes.dev/reference/operations/schema/#clone_table) | CREATE TABLE `target` CLONE `source`: same definition plus independent copies of its rows (deep clone), optionally as of a `version` / `timestamp`. | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Bases](https://datanotes.dev/guides/database-objects/bases/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/) |
19
- | [`add_column`](https://datanotes.dev/reference/operations/schema/#add_column) | Add a typed column. | [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Import existing notes](https://datanotes.dev/guides/read-and-write/import-notes/) |
19
+ | [`add_column`](https://datanotes.dev/reference/operations/schema/#add_column) | Add a typed column. | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Import existing notes](https://datanotes.dev/guides/read-and-write/import-notes/) |
20
20
  | [`rename_column`](https://datanotes.dev/reference/operations/schema/#rename_column) | Rename a column in metastore.yaml and on every row. | [Columns and types](https://datanotes.dev/guides/database-objects/columns/) |
21
21
  | [`drop_column`](https://datanotes.dev/reference/operations/schema/#drop_column) | Remove a column from the schema and every row. | [Columns and types](https://datanotes.dev/guides/database-objects/columns/) |
22
22
  | [`alter_column`](https://datanotes.dev/reference/operations/schema/#alter_column) | Change a column’s attributes (type, min/max/step, values, required, default, label, aliases, description, note, `ref_where`, `ref_by` (see list_link_targets), `acyclic` (refused while the rows already form a cycle: they are listed); `null` removes an attribute, except `description`, which changes but never goes (null or “” is refused); `dense` true/false). | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/) |
@@ -26,7 +26,7 @@ Operations that define the database: tables, columns, constraints, bases and vie
26
26
  | [`set_table_bases`](https://datanotes.dev/reference/operations/schema/#set_table_bases) | Set the bases a table inherits from (`bases`, in order; `[]` removes them). | [Bases](https://datanotes.dev/guides/database-objects/bases/) |
27
27
  | [`add_constraint`](https://datanotes.dev/reference/operations/schema/#add_constraint) | ALTER TABLE ADD CONSTRAINT `name` CHECK: `check` is a where filter every row must match, e.g. | [CHECK constraints](https://datanotes.dev/guides/data-quality/check-constraints/) |
28
28
  | [`drop_constraint`](https://datanotes.dev/reference/operations/schema/#drop_constraint) | Remove the CHECK constraint `name` from `table`. | [CHECK constraints](https://datanotes.dev/guides/data-quality/check-constraints/) |
29
- | [`create_view`](https://datanotes.dev/reference/operations/schema/#create_view) | Create (or `replace`) a view: a named select stored in metastore.yaml. | [Views](https://datanotes.dev/guides/database-objects/views/) |
29
+ | [`create_view`](https://datanotes.dev/reference/operations/schema/#create_view) | Create (or `replace`) a view: a named select stored in metastore.yaml. | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Views](https://datanotes.dev/guides/database-objects/views/) |
30
30
  | [`drop_view`](https://datanotes.dev/reference/operations/schema/#drop_view) | Remove a view from `metastore.yaml` (undo with `undo_migration`). | [Views](https://datanotes.dev/guides/database-objects/views/) |
31
31
 
32
32
  ## Rows (DML)
@@ -36,7 +36,7 @@ Operations that write rows: insert, update, merge, delete, move, adopt and batch
36
36
  | Operation | What it does | Examples |
37
37
  | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
38
38
  | [`insert_row`](https://datanotes.dev/reference/operations/rows/#insert_row) | Insert a row (new note). | [Catalogs, schemas and the database](https://datanotes.dev/guides/database-objects/catalogs-and-schemas/), [Tables](https://datanotes.dev/guides/database-objects/tables/), [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Bases](https://datanotes.dev/guides/database-objects/bases/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Validation](https://datanotes.dev/guides/data-quality/validation/), [CHECK constraints](https://datanotes.dev/guides/data-quality/check-constraints/), [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/), [Automatic links](https://datanotes.dev/guides/read-and-write/automatic-links/), [Batch writes](https://datanotes.dev/guides/read-and-write/batch/), [Import existing notes](https://datanotes.dev/guides/read-and-write/import-notes/), [Journal and undo](https://datanotes.dev/guides/history/journal-and-undo/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/), [Change data feed](https://datanotes.dev/guides/history/change-data-feed/), [Restore a table or the database](https://datanotes.dev/guides/history/restore/) |
39
- | [`update_row`](https://datanotes.dev/reference/operations/rows/#update_row) | Update exactly ONE row, addressed by its `id` (the system UUID) or its `path`; refused when the row does not exist (or id and path disagree). | [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Bases](https://datanotes.dev/guides/database-objects/bases/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [CHECK constraints](https://datanotes.dev/guides/data-quality/check-constraints/), [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/), [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/), [Automatic links](https://datanotes.dev/guides/read-and-write/automatic-links/), [Batch writes](https://datanotes.dev/guides/read-and-write/batch/), [Journal and undo](https://datanotes.dev/guides/history/journal-and-undo/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/), [Change data feed](https://datanotes.dev/guides/history/change-data-feed/), [Restore a table or the database](https://datanotes.dev/guides/history/restore/) |
39
+ | [`update_row`](https://datanotes.dev/reference/operations/rows/#update_row) | Update exactly ONE row, addressed by its `id` (the system UUID) or its `path`; refused when the row does not exist (or id and path disagree). | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Columns and types](https://datanotes.dev/guides/database-objects/columns/), [Bases](https://datanotes.dev/guides/database-objects/bases/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [CHECK constraints](https://datanotes.dev/guides/data-quality/check-constraints/), [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/), [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/), [Automatic links](https://datanotes.dev/guides/read-and-write/automatic-links/), [Batch writes](https://datanotes.dev/guides/read-and-write/batch/), [Journal and undo](https://datanotes.dev/guides/history/journal-and-undo/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/), [Change data feed](https://datanotes.dev/guides/history/change-data-feed/), [Restore a table or the database](https://datanotes.dev/guides/history/restore/) |
40
40
  | [`update_rows`](https://datanotes.dev/reference/operations/rows/#update_rows) | Update every row matching `where` (required: `{}` is every row). | [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/) |
41
41
  | [`merge_rows`](https://datanotes.dev/reference/operations/rows/#merge_rows) | MERGE (upsert) `rows` into `table` by the key columns `on` (e.g. | [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/) |
42
42
  | [`delete_rows`](https://datanotes.dev/reference/operations/rows/#delete_rows) | Delete rows matching `where`. | [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Write and move rows](https://datanotes.dev/guides/read-and-write/write-rows/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/) |
@@ -90,7 +90,7 @@ Operations that describe and check the database, configure it and maintain its i
90
90
  | [`describe_table`](https://datanotes.dev/reference/operations/auxiliary/#describe_table) | Describe a table (`catalog.schema.table` or a shorter unambiguous name): `qualified`, `name`, `catalog`, `schema`, `description`, `aliases`, `layout` (`folder`, `row_folder`: the folder pattern of new rows, `archive`), `options` (`partition`, `filename`, `archive`, `exclude`), typed `columns` with label/aliases/description and the dense flag, `untyped_fields`, `row_count`, and when set: `tags`, `bases` (the bases it inherits from, in order), `constraints` (its CHECKs, name → where), `constraint_hints` (their own hints, name → hint), `instructions` (how to fill a row: follow them before you write one), `row_template`, `history`, `autolink_target`, `fields` (their values). | [Catalogs, schemas and the database](https://datanotes.dev/guides/database-objects/catalogs-and-schemas/), [Tables](https://datanotes.dev/guides/database-objects/tables/), [Bases](https://datanotes.dev/guides/database-objects/bases/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/) |
91
91
  | [`describe_database`](https://datanotes.dev/reference/operations/auxiliary/#describe_database) | Describe the database: its folder (`root`), `metastore` (`metastore.yaml`: read it freely, but it is read-only for agents and changes only through the schema operations), configuration (default catalog and schema, row partition and file-name formats, archive folder, time zone, history, automatic links), journal folder, `bases` (shared column sets and the tables using them), `catalogs` → `schemas` → `tables` (with `row_count`, `tags`, and `unreadable_count` when some rows’ front matter cannot be read) and `views`; catalogs and schemas show their `comment` (set with `comment_on`). | [Catalogs, schemas and the database](https://datanotes.dev/guides/database-objects/catalogs-and-schemas/), [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/) |
92
92
  | [`configure_database`](https://datanotes.dev/reference/operations/auxiliary/#configure_database) | Configure the database (persisted in metastore.yaml `config:`): `root` (rename the database folder; links follow; revert by renaming back), `default_catalog`, `default_schema`, `default_partition` (“” = flat) and `default_filename` (date formats for new time-based tables), `archive_folder`, `timezone` (IANA; completes date-times written without offset), `history` (transaction log for every table: true in a database the engine creates, false when `config` lacks it, as in a metastore from before 3.0.0; change it only on the user’s request), `autolink` (the text a write puts in a body links the notes it mentions; on by default). | [Catalogs, schemas and the database](https://datanotes.dev/guides/database-objects/catalogs-and-schemas/), [Tables](https://datanotes.dev/guides/database-objects/tables/), [Automatic links](https://datanotes.dev/guides/read-and-write/automatic-links/), [Table history and time travel](https://datanotes.dev/guides/history/table-history/) |
93
- | [`check_table`](https://datanotes.dev/reference/operations/auxiliary/#check_table) | Validate every row against the table (required, types, ranges, enums, links, unknown columns, CHECK constraints, those that follow links included, filtered link targets (ref_where / ref_by), stale generated/identity values, missing inverse links, cycles of hierarchy and acyclic columns, front matter that cannot be read: code `unreadable`, with no column, for a note whose `table` line names the table but whose YAML is broken, which every other read leaves out). | [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/), [Find rows that break the schema](https://datanotes.dev/guides/data-quality/check-table/) |
93
+ | [`check_table`](https://datanotes.dev/reference/operations/auxiliary/#check_table) | Validate every row against the table (required, types, ranges, enums, links, unknown columns, CHECK constraints, those that follow links included, filtered link targets (ref_where / ref_by), stale generated/identity values, missing inverse links, cycles of hierarchy and acyclic columns, front matter that cannot be read: code `unreadable`, with no column, for a note whose `table` line names the table but whose YAML is broken, which every other read leaves out). | [Tables](https://datanotes.dev/guides/database-objects/tables/), [Relations and hierarchies](https://datanotes.dev/guides/database-objects/relations/), [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/), [Find rows that break the schema](https://datanotes.dev/guides/data-quality/check-table/) |
94
94
  | [`infer_table`](https://datanotes.dev/reference/operations/auxiliary/#infer_table) | Read-only schema inference from notes’ front matter. | [Hand edits](https://datanotes.dev/guides/data-quality/hand-edits/), [Import existing notes](https://datanotes.dev/guides/read-and-write/import-notes/) |
95
95
  | [`describe_semantic_index`](https://datanotes.dev/reference/operations/auxiliary/#describe_semantic_index) | The semantic search index: `enabled`, `provider`, `model`, `files`, `passages`, `pending`, `running`, `last_sync`, `last_error`. | [Find notes by meaning](https://datanotes.dev/guides/search/semantic/) |
96
96
  | [`sync_semantic_index`](https://datanotes.dev/reference/operations/auxiliary/#sync_semantic_index) | Bring the semantic search index up to date: embed the notes changed since the last run (the engine also does it on its own about ten seconds after edits). | [Find notes by meaning](https://datanotes.dev/guides/search/semantic/) |
@@ -4,6 +4,55 @@
4
4
 
5
5
  This page lists each version of Datanotes, newest first. Datanotes follows [semantic versioning](https://semver.org): a major version can break what you rely on, and its notes list those changes first. The package is on [npm](https://www.npmjs.com/package/datanotes), and each version has a [GitHub release](https://github.com/davidefornelli/datanotes/releases).
6
6
 
7
+ ## 3.3.1
8
+
9
+ Datanotes 3.3.1 fixes `alter_table` when it renames or moves a table. It only adds to 3.3: no operation, argument or setting goes away.
10
+
11
+ ### Fixes
12
+
13
+ * **References follow a moved table**: `alter_table` with `name`, `catalog` or `schema` rewrites every name of the table in the other definitions. Before, the links of other tables kept the old name, and `check_table` then reported a `ref` violation on every row. The engine now rewrites:
14
+
15
+ * the `ref` of link columns and lists of links, in tables and in bases
16
+ * the `vocabulary` of string columns
17
+ * the tables a view reads, in `table`, `union` and `join`
18
+
19
+ * **`schema_references`**: a new field of the answer lists each name rewritten, also on a dry run. `undo_migration` puts the old names back. [Rename or move a table](https://datanotes.dev/guides/database-objects/tables/#rename-or-move-a-table) shows it.
20
+
21
+ * **CHECKs and link filters**: a CHECK that follows links, or a `ref_where` / `ref_by`, that reads the table through a link no longer refuses the move. These rules name columns, not tables, so they follow the rewritten `ref`. `drop_table` still refuses while they read the table.
22
+
23
+ ## 3.3.0
24
+
25
+ Datanotes 3.3.0 installs extensions: tables, views, bases and MCP tools from a git repository, pinned to a version. It only adds to 3.2: no operation, argument or setting goes away.
26
+
27
+ ### Extensions
28
+
29
+ An extension is one git repository with a manifest, `datanotes-extension.json`. The manifest declares tables, CHECKs with hints, table instructions, views, bases, tools and the permissions the tools need. [Install extensions](https://datanotes.dev/administration/extensions/) and [Write an extension](https://datanotes.dev/develop/write-an-extension/) cover both sides.
30
+
31
+ * **`datanotes extension install`**: fetches a version tag or a commit, prints a plan and asks you to confirm. Branches are refused. A plan lists the tables it creates, adopts or matches, the tools and the token. `--map`, `--create`, `--add`, `--catalog` and `--schema` carry your choices. `--dry-run` writes nothing.
32
+
33
+ * **One batch**: the installer writes everything in one batch, so one `undo_migration` undoes it.
34
+
35
+ * **Five more commands**:
36
+
37
+ * `update` moves an extension to a newer version.
38
+ * `rollback` undoes the last install or update.
39
+ * `remove` removes an extension and keeps its tables.
40
+ * `list` shows what is installed.
41
+ * `check` checks an extension’s repository, for its authors.
42
+
43
+ * **A token for each extension**: `ext-<name>` writes only the extension’s tables and never changes the schema. The journal records it as `auth`.
44
+
45
+ * **The registry**: the engine keeps the installation records in its store. Three routes serve them: `POST /datanotes/extensions/`, `/datanotes/extensions/record/` and `/datanotes/extensions/delete/`. The last two are for the owner.
46
+
47
+ * **Exit codes**: 0 done, 1 error, 2 the plan has problems, 3 confirmation needed.
48
+
49
+ ### For MCP servers
50
+
51
+ * **`datanotes mcp` loads extensions**: stdio and HTTP add the tools of every installed extension after the engine’s tools. A tool that writes is refused to a client token that may not write its tables. A restart loads a new install.
52
+ * **`--no-extensions`**: leaves the extensions out. `DATANOTES_MCP_EXTENSIONS=0` does the same. `--profile read` keeps only their read-only tools.
53
+ * **Docs**: `list_docs`, `read_docs` and `search_docs` serve each extension’s docs under `extensions/<name>/`.
54
+ * **`datanotes/extensions`**: a new package subpath. It exports the manifest and module types, `defineExtension`, `ExtensionToolError` and the loader for MCP hosts. [Write an extension](https://datanotes.dev/develop/write-an-extension/#write-the-tools) shows it.
55
+
7
56
  ## 3.2.0
8
57
 
9
58
  Datanotes 3.2.0 keeps the links between rows of one table free of cycles. It also lets a table tell agents how to fill its rows. It only adds to 3.1: no operation, argument or setting goes away.
@@ -143,6 +143,17 @@ npx -y datanotes mcp serve --except undo_migration --owner-tools
143
143
 
144
144
  You can’t pass `--profile` and `--tools` together. An unknown tool name stops the command, and the error names the closest tool. A call to a tool the server doesn’t offer fails as an unknown tool. The engine still checks the token on every call, so a [named token](#give-each-agent-its-own-token) limits the agent too.
145
145
 
146
+ ## Tools of extensions
147
+
148
+ An [installed extension](https://datanotes.dev/administration/extensions/) adds its own tools. `datanotes mcp` offers them after the engine’s tools, in stdio and in `serve`. The docs tools serve its docs under `extensions/<name>/`.
149
+
150
+ * **After an install**: restart the MCP server, or the client that started it. A running server does not see a new extension.
151
+ * **`--no-extensions`**: leaves the extension tools out. `DATANOTES_MCP_EXTENSIONS=0` does the same.
152
+ * **`--profile read`**: keeps only the extensions’ tools that read.
153
+ * **`--tools` and `--except`**: name engine and docs tools only.
154
+
155
+ The engine still checks the token on every call. A tool that writes also needs a client token that may write its tables.
156
+
146
157
  ## Give each agent its own token
147
158
 
148
159
  A named token limits what an agent can do, and the journal records its name. It writes only the tables you allow in `write`, changes the schema only with `ddl`, and undoes changes only with `maintain`. Create one with the owner’s token:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datanotes",
3
- "version": "3.2.0",
3
+ "version": "3.3.1",
4
4
  "mcpName": "io.github.davidefornelli/datanotes",
5
5
  "description": "The engine of your second brain: Markdown notes as database tables, for you and your agents.",
6
6
  "keywords": [
@@ -72,6 +72,16 @@
72
72
  "default": "./dist/api/mcp.cjs"
73
73
  }
74
74
  },
75
+ "./extensions": {
76
+ "import": {
77
+ "types": "./dist/api/extensions.d.ts",
78
+ "default": "./dist/api/extensions.js"
79
+ },
80
+ "require": {
81
+ "types": "./dist/api/extensions.d.cts",
82
+ "default": "./dist/api/extensions.cjs"
83
+ }
84
+ },
75
85
  "./package.json": "./package.json"
76
86
  },
77
87
  "files": [