Uh oh!
There was an error while loading. Please reload this page.
feat: Add Tables app support (tables, columns, rows CRUD) - #156
Conversation
d005177 to
084595dComparejanepie
commented
Apr 22, 2026
Thank you for all the new tools! I'll take some time to check these. Did you test all of these tools per hand or per AI agent? |
Pavlinchen
commented
Apr 22, 2026
Hello, I had two LLMs with different contexts & prompts verify the functionality. |
janepie
commented
Apr 23, 2026
I'd like you to please run the changes on a local instance and try it out yourself for real, to see if the tools work as expected when actually used :) Developing per LLM is fine, but please check the work manually |
janepie
commented
Apr 27, 2026
@Pavlinchen as soon as you tested this and the other PRs manually, please give me a ping :) |
@janepie I have tested the actuall calling of the tools the same way an LLM would locally against a mock instance, but can understand that you would like a full end-to-end test (especially for such a "big" feature). |
janepie
commented
May 4, 2026
What do you mean by "creating the docs"? |
Pavlinchen
commented
May 5, 2026
Ah, that simplifies things significantly, thanks for the clarification. |
janepie
commented
May 6, 2026
All good, don't worry :) |
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
Pavlinchen
commented
May 21, 2026
janepie
commented
Jun 1, 2026
I found a small issue: the usergroup configuration parameters are not available in the create_column tool, so it's not possible to create a column that takes more than one value for users. The model doesn't know this though so adding a row with that fails. Can you add them? The API reference is here: https://petstore.swagger.io/?url=https://raw.githubusercontent.com/nextcloud/tables/main/openapi.json#/api1/api1-create-column |
janepie
commented
Jun 1, 2026
Seems like everything containing a usergroup column is an issue in general, there is some more comment on how to use it needed. Everything else works pretty well, nice PR, thank you for putting the effort into it! |
Pavlinchen
commented
Jun 11, 2026
32e196c to
f8fedc9ComparePavlinchen
commented
Jun 11, 2026
(force pushed to use alias e-Mail adress) |
f8fedc9 to
771dc28CompareFrom what I can see, the CI failures are not neccessarily related solely to my changes, are they? stable32: looks to me like it timed out during inference, perhaps the limit needs to be raised, now that the tool catalog is longer? master: Let me know if you want me to do anything |
marcelklehr
commented
Jun 15, 2026
The problem seems to be that the tests do not use php 8.3 for server:master and a huggingface rate limit prevents the download of llm2 models in stable31. The latter should be fixed with a rebase. |
janepie
commented
Jul 31, 2026
@Pavlinchen sorry for the late reply!
Yes please :)
We added caching of the model to the tests |
Add a new tool module for the Nextcloud Tables app with 12 MCP tools covering full CRUD operations across tables, columns, and rows: Tables: list_tables, create_table, update_table, delete_table Columns: list_columns, create_column, update_column, delete_column Rows: list_rows, create_row, update_row, delete_row Column creation supports all five column types (text, number, selection, datetime, usergroup) with their type-specific configuration parameters. Row data is passed as a JSON string mapping column IDs to values, matching the Tables API v1 contract. Availability check: 'tables' in nc.capabilities. Tested against Nextcloud 32.0.8 with Tables 1.0.5. Signed-off-by: Pavlinchen <69079839+Pavlinchen@users.noreply.github.com>
Address review: create_column/update_column now expose the six
usergroup* parameters; create_row/update_row docstrings document
the [{"id": ..., "type": 0|1|2}] cell value shape.
Signed-off-by: Pavlinchen <69079839+Pavlinchen@users.noreply.github.com>771dc28 to
f1f8cd8Comparejanepie
commented
Jul 31, 2026
( just did it for you) |
Pavlinchen
commented
Aug 2, 2026
Hi again @janepie, Thanks for taking care of the rebase! |
The context_agent ExApp ships these Tables tools but they are not listed in the "Currently implemented tools" section. PR nextcloud/context_agent#156 introduced Tables support; this documents the resulting tool surface. Adds a new "Tables tools" section covering: - Tables: list, create, update, delete - Columns: list, create, update, delete - Rows: list, create, update, delete Signed-off-by: Pavlinchen <69079839+Pavlinchen@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
janepie
commented
Aug 3, 2026
Looks good, merged! Thanks a lot for your contribution, it will be included in the NC35 release of Context Agent :) |
Pavlinchen
commented
Aug 3, 2026
Thank you for the pleasant interaction and happy to hear :) |





Summary
tables.pytool module with 12 MCP tools for the Nextcloud Tables app/index.php/apps/tables/api/1/)Motivation
The Tables app is one of the most-used Nextcloud apps for structured data (spreadsheet-like tables). It is currently not supported by the Context Agent, meaning the AI assistant cannot read, create, or modify table data. This is a significant gap for users who manage data in Tables alongside Deck, Calendar, and other supported apps.
Implementation Details
Disclaimer
Implementation from a technical perspective was done mainly by a LLM (Claude Opus 4.7 max effort).
Every tool and endpoint response shape was validated end-to-end against Nextcloud 32.0.8 + Tables 1.0.5, with a full lifecycle smoke test completed before opening the PR.
Follows the same patterns as
deck.py,cookbook.py, andbookmarks.py:nc._session._create_adapter().request()for REST API calls@safe_toolfor read operations,@dangerous_toolfor mutationsis_availablechecks'tables' in await nc.capabilitiesTools
list_tablesGET /api/1/tablescreate_tablePOST /api/1/tablesupdate_tablePUT /api/1/tables/{tableId}delete_tableDELETE /api/1/tables/{tableId}list_columnsGET /api/1/tables/{tableId}/columnscreate_columnPOST /api/1/tables/{tableId}/columnsupdate_columnPUT /api/1/columns/{columnId}delete_columnDELETE /api/1/columns/{columnId}list_rowsGET /api/1/tables/{tableId}/rowscreate_rowPOST /api/1/tables/{tableId}/rowsupdate_rowPUT /api/1/rows/{rowId}delete_rowDELETE /api/1/rows/{rowId}Column types
create_columnaccepts acolumn_typeparameter with type-specific optional parameters:textnumberselectiondatetimeusergroupRow data format
create_rowandupdate_rowaccept adataparameter as a JSON string mapping column IDs to values:{"5": "Alice", "6": 95}This matches the Tables API v1 contract where the backend converts
{columnId: value}pairs internally.Test Plan