gibson-cli 0.7.8__tar.gz → 0.8.1__tar.gz

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 (148) hide show
  1. {gibson_cli-0.7.8/gibson_cli.egg-info → gibson_cli-0.8.1}/PKG-INFO +34 -12
  2. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/README.md +32 -10
  3. gibson_cli-0.8.1/bin/build.sh +1 -0
  4. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/bin/gibson +2 -2
  5. gibson_cli-0.8.1/bin/release.sh +5 -0
  6. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/api/BaseApi.py +26 -8
  7. gibson_cli-0.8.1/gibson/api/ProjectApi.py +46 -0
  8. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Version.py +1 -1
  9. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Entity.py +2 -2
  10. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/list/Projects.py +1 -1
  11. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Configuration.py +14 -0
  12. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Conversation.py +2 -2
  13. gibson_cli-0.8.1/gibson/services/mcp/server.py +87 -0
  14. {gibson_cli-0.7.8 → gibson_cli-0.8.1/gibson_cli.egg-info}/PKG-INFO +34 -12
  15. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson_cli.egg-info/requires.txt +1 -1
  16. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson_cli.egg-info/top_level.txt +0 -1
  17. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/pyproject.toml +1 -1
  18. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/requirements.txt +1 -1
  19. gibson_cli-0.7.8/bin/build.sh +0 -2
  20. gibson_cli-0.7.8/bin/release.sh +0 -1
  21. gibson_cli-0.7.8/gibson/api/ProjectApi.py +0 -13
  22. gibson_cli-0.7.8/gibson/services/mcp/server.py +0 -13
  23. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/.gitignore +0 -0
  24. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/.pre-commit-config.yaml +0 -0
  25. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/bin/clean.sh +0 -0
  26. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/api/Cli.py +0 -0
  27. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/bin/gibson.py +0 -0
  28. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/BaseCommand.py +0 -0
  29. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Build.py +0 -0
  30. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Conf.py +0 -0
  31. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Count.py +0 -0
  32. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Dev.py +0 -0
  33. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Forget.py +0 -0
  34. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Help.py +0 -0
  35. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Merge.py +0 -0
  36. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Modify.py +0 -0
  37. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Question.py +0 -0
  38. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Remove.py +0 -0
  39. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Show.py +0 -0
  40. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/Tree.py +0 -0
  41. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/auth/Auth.py +0 -0
  42. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/auth/Login.py +0 -0
  43. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/auth/Logout.py +0 -0
  44. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Api.py +0 -0
  45. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Base.py +0 -0
  46. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Code.py +0 -0
  47. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Model.py +0 -0
  48. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Models.py +0 -0
  49. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Schema.py +0 -0
  50. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Schemas.py +0 -0
  51. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Test.py +0 -0
  52. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/code/Tests.py +0 -0
  53. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/importer/Import.py +0 -0
  54. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/importer/OpenApi.py +0 -0
  55. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/list/Entities.py +0 -0
  56. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/list/List.py +0 -0
  57. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/mcp/McpServer.py +0 -0
  58. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/new/Module.py +0 -0
  59. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/new/New.py +0 -0
  60. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/new/Project.py +0 -0
  61. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/rename/Entity.py +0 -0
  62. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/rename/Rename.py +0 -0
  63. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/rewrite/Rewrite.py +0 -0
  64. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/tests/test_command_BaseCommand.py +0 -0
  65. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/command/tests/test_command_Conf.py +0 -0
  66. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Api.py +0 -0
  67. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Code.py +0 -0
  68. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Custom.py +0 -0
  69. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Datastore.py +0 -0
  70. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Dependencies.py +0 -0
  71. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Dev.py +0 -0
  72. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Frameworks.py +0 -0
  73. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Modeler.py +0 -0
  74. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Paths.py +0 -0
  75. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Platform.py +0 -0
  76. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Project.py +0 -0
  77. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/Version.py +0 -0
  78. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/dev/Api.py +0 -0
  79. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/dev/Base.py +0 -0
  80. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/dev/Model.py +0 -0
  81. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/dev/Schema.py +0 -0
  82. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/tests/test_conf_Dependencies.py +0 -0
  83. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/conf/tests/test_conf_Platform.py +0 -0
  84. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Colors.py +0 -0
  85. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/CommandRouter.py +0 -0
  86. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Completions.py +0 -0
  87. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Diff.py +0 -0
  88. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Env.py +0 -0
  89. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Memory.py +0 -0
  90. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/PythonPath.py +0 -0
  91. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/Spinner.py +0 -0
  92. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/TimeKeeper.py +0 -0
  93. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/core/utils.py +0 -0
  94. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/data/bash-completion.tmpl +0 -0
  95. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/data/mysql/default-ref-table.tmpl +0 -0
  96. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/data/mysql/default-table.tmpl +0 -0
  97. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/data/postgresql/default-ref-table.tmpl +0 -0
  98. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/data/postgresql/default-table.tmpl +0 -0
  99. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/db/TableExceptions.py +0 -0
  100. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/db/tests/test_db_TableExceptions.py +0 -0
  101. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/dev/Dev.py +0 -0
  102. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/Header.py +0 -0
  103. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/WorkspaceFooter.py +0 -0
  104. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/WorkspaceHeader.py +0 -0
  105. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/tests/test_display_Header.py +0 -0
  106. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/tests/test_display_WorkspaceFooter.py +0 -0
  107. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/display/tests/test_display_WorkspaceHeader.py +0 -0
  108. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/lang/Python.py +0 -0
  109. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/lang/tests/test_lang_Python.py +0 -0
  110. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/auth/Server.py +0 -0
  111. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/DataDictionary.py +0 -0
  112. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/EntityKeys.py +0 -0
  113. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/Manager.py +0 -0
  114. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/tests/test_code_context_schema_DataDictionary.py +0 -0
  115. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/tests/test_code_context_schema_EntityKeys.py +0 -0
  116. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/context/schema/tests/test_code_context_schema_Manager.py +0 -0
  117. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/Authenticator.py +0 -0
  118. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/BaseCustomization.py +0 -0
  119. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/CustomizationManager.py +0 -0
  120. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/Index.py +0 -0
  121. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/tests/test_code_customization_Authenticator.py +0 -0
  122. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/services/code/customization/tests/test_code_customization_BaseCustomization.py +0 -0
  123. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/Entity.py +0 -0
  124. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/Entity.py +0 -0
  125. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/constraints/ReferenceConstraint.py +0 -0
  126. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/ForeignKey.py +0 -0
  127. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/Index.py +0 -0
  128. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/IndexAttribute.py +0 -0
  129. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_ForeignKey.py +0 -0
  130. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_Index.py +0 -0
  131. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/keys/tests/test_structure_mysql_keys_IndexAttribute.py +0 -0
  132. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/testing.py +0 -0
  133. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/mysql/tests/test_structure_mysql_Entity.py +0 -0
  134. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/Entity.py +0 -0
  135. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/References.py +0 -0
  136. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/table/ForeignKey.py +0 -0
  137. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/table/tests/test_structure_postgresql_table_ForeignKey.py +0 -0
  138. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/testing.py +0 -0
  139. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/postgresql/tests/test_structure_postgresql_Entity.py +0 -0
  140. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/structure/tests/test_structure_Entity.py +0 -0
  141. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/tests/test_Env.py +0 -0
  142. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/tests/test_Memory.py +0 -0
  143. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson/tests/test_utils.py +0 -0
  144. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson_cli.egg-info/SOURCES.txt +0 -0
  145. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson_cli.egg-info/dependency_links.txt +0 -0
  146. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/gibson_cli.egg-info/entry_points.txt +0 -0
  147. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/setup.cfg +0 -0
  148. {gibson_cli-0.7.8 → gibson_cli-0.8.1}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gibson-cli
3
- Version: 0.7.8
3
+ Version: 0.8.1
4
4
  Summary: Gibson Command Line Interface
5
5
  Author-email: GibsonAI <noc@gibsonai.com>
6
6
  Project-URL: Homepage, https://gibsonai.com/
@@ -39,7 +39,7 @@ Requires-Dist: markupsafe==2.1.5
39
39
  Requires-Dist: mcp==1.6.0
40
40
  Requires-Dist: mdurl==0.1.2
41
41
  Requires-Dist: orjson==3.10.3
42
- Requires-Dist: packaging==23.2
42
+ Requires-Dist: packaging==24.2
43
43
  Requires-Dist: pluggy==1.4.0
44
44
  Requires-Dist: pydantic==2.11.0
45
45
  Requires-Dist: pydantic-core==2.33.0
@@ -73,36 +73,39 @@ Requires-Dist: watchfiles==0.21.0
73
73
  Requires-Dist: websockets==12.0
74
74
  Requires-Dist: yaspin==3.1.0
75
75
 
76
-
77
76
  [![GibsonAI](https://github.com/user-attachments/assets/26bc1002-f878-4995-a6c5-eb8d5eb69c28)](https://gibsonai.com/)
78
77
 
79
78
  # Gibson CLI
80
79
 
81
80
  [![PyPI - Version](https://img.shields.io/pypi/v/gibson-cli)](https://pypi.org/project/gibson-cli/)
82
- ![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-blue)
81
+ ![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue)
83
82
  [![Docs](https://img.shields.io/badge/Docs-https://docs.gibsonai.com-green)](https://docs.gibsonai.com)
84
83
 
85
84
  ## Prerequisites
86
85
 
87
- Gibson currently works on projects that use Python 3.9 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
86
+ Gibson currently works on projects that use Python 3.10 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
88
87
 
89
88
  Portions of the Gibson backend code are written by Gibson. So far, versus a human developer, it has coded 66% of the software and did so in seconds. To get started, read the instructions here.
90
89
 
91
90
  ## Installation / Upgrading
92
91
 
93
- Install the latest version of the CLI using `pip`
92
+ ### With [uv](https://docs.astral.sh/uv/) (recommended)
94
93
 
95
94
  ```sh
96
- pip3 install gibson-cli --upgrade
95
+ uv tool install gibson-cli@latest
97
96
  ```
98
97
 
99
- Note: the first time you install any package from PyPI via `pip` that includes an executable, it is placed in a directory that is likely not in your `PATH`. There are a number of ways to do this, but one method is to run the following command:
98
+ If you're unable to run `gibson` after installing with uv, try running `uv tool update-shell` to ensure your `PATH` includes the uv tool executables directory.
99
+
100
+ ### With pip
100
101
 
101
102
  ```sh
102
- echo 'export PATH="$PATH:${$(which python3)%python3}"' >> ~/.zshrc # or ~/.bashrc
103
+ pip3 install gibson-cli --upgrade
103
104
  ```
104
105
 
105
- You will only need to do this once.
106
+ Note: you'll want to run this **outside** of a virtual environment (globally on your machine)
107
+
108
+ If you're unable to run `gibson` after installing with pip, ensure your `PATH` contains the directory where pip installs executables. This can differ based on your operating system, python installation location, and pip version.
106
109
 
107
110
  ## Key Terms
108
111
 
@@ -196,7 +199,7 @@ All of Gibson's configuration files and caches are stored in `$HOME/.gibson`. Us
196
199
 
197
200
  ## Currently Supported Software
198
201
 
199
- - Python 3.9 or greater
202
+ - Python 3.10 or greater
200
203
  - MySQL
201
204
  - SQLAlchemy
202
205
  - Pydantic
@@ -380,7 +383,26 @@ At the moment, just refer to the base-level schema directly.
380
383
  - e.g. `gibson q add nickname to sql://user`
381
384
  - `gibson code model user`
382
385
 
386
+ ### Setting up the MCP server with Cursor
387
+
388
+ Head over to `Cursor Settings` > `MCP` and click `Add new MCP server`
389
+
390
+ Update the configuration to look like the following:
391
+
392
+ ```json
393
+ {
394
+ "mcpServers": {
395
+ "gibson": {
396
+ "command": "uvx",
397
+ "args": ["--from", "gibson-cli@latest", "gibson", "mcp", "run"]
398
+ }
399
+ }
400
+ }
401
+ ```
402
+
403
+ That's it! Just make sure you're logged in to the CLI (if you're reading this, you've likely already run `gibson auth login`) and then Cursor's agents will have access to the Gibson MCP server to create + update projects on your behalf, explain how to interact with the database + hosted APIs, and even write working code for you.
404
+
383
405
  ## Contributing
384
406
 
385
407
  - Clone this repository somewhere in your file system
386
- - `pip3 install [path to this repository]`
408
+ - `uv tool install [path to repository] -e`
@@ -1,33 +1,36 @@
1
-
2
1
  [![GibsonAI](https://github.com/user-attachments/assets/26bc1002-f878-4995-a6c5-eb8d5eb69c28)](https://gibsonai.com/)
3
2
 
4
3
  # Gibson CLI
5
4
 
6
5
  [![PyPI - Version](https://img.shields.io/pypi/v/gibson-cli)](https://pypi.org/project/gibson-cli/)
7
- ![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-blue)
6
+ ![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue)
8
7
  [![Docs](https://img.shields.io/badge/Docs-https://docs.gibsonai.com-green)](https://docs.gibsonai.com)
9
8
 
10
9
  ## Prerequisites
11
10
 
12
- Gibson currently works on projects that use Python 3.9 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
11
+ Gibson currently works on projects that use Python 3.10 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
13
12
 
14
13
  Portions of the Gibson backend code are written by Gibson. So far, versus a human developer, it has coded 66% of the software and did so in seconds. To get started, read the instructions here.
15
14
 
16
15
  ## Installation / Upgrading
17
16
 
18
- Install the latest version of the CLI using `pip`
17
+ ### With [uv](https://docs.astral.sh/uv/) (recommended)
19
18
 
20
19
  ```sh
21
- pip3 install gibson-cli --upgrade
20
+ uv tool install gibson-cli@latest
22
21
  ```
23
22
 
24
- Note: the first time you install any package from PyPI via `pip` that includes an executable, it is placed in a directory that is likely not in your `PATH`. There are a number of ways to do this, but one method is to run the following command:
23
+ If you're unable to run `gibson` after installing with uv, try running `uv tool update-shell` to ensure your `PATH` includes the uv tool executables directory.
24
+
25
+ ### With pip
25
26
 
26
27
  ```sh
27
- echo 'export PATH="$PATH:${$(which python3)%python3}"' >> ~/.zshrc # or ~/.bashrc
28
+ pip3 install gibson-cli --upgrade
28
29
  ```
29
30
 
30
- You will only need to do this once.
31
+ Note: you'll want to run this **outside** of a virtual environment (globally on your machine)
32
+
33
+ If you're unable to run `gibson` after installing with pip, ensure your `PATH` contains the directory where pip installs executables. This can differ based on your operating system, python installation location, and pip version.
31
34
 
32
35
  ## Key Terms
33
36
 
@@ -121,7 +124,7 @@ All of Gibson's configuration files and caches are stored in `$HOME/.gibson`. Us
121
124
 
122
125
  ## Currently Supported Software
123
126
 
124
- - Python 3.9 or greater
127
+ - Python 3.10 or greater
125
128
  - MySQL
126
129
  - SQLAlchemy
127
130
  - Pydantic
@@ -305,7 +308,26 @@ At the moment, just refer to the base-level schema directly.
305
308
  - e.g. `gibson q add nickname to sql://user`
306
309
  - `gibson code model user`
307
310
 
311
+ ### Setting up the MCP server with Cursor
312
+
313
+ Head over to `Cursor Settings` > `MCP` and click `Add new MCP server`
314
+
315
+ Update the configuration to look like the following:
316
+
317
+ ```json
318
+ {
319
+ "mcpServers": {
320
+ "gibson": {
321
+ "command": "uvx",
322
+ "args": ["--from", "gibson-cli@latest", "gibson", "mcp", "run"]
323
+ }
324
+ }
325
+ }
326
+ ```
327
+
328
+ That's it! Just make sure you're logged in to the CLI (if you're reading this, you've likely already run `gibson auth login`) and then Cursor's agents will have access to the Gibson MCP server to create + update projects on your behalf, explain how to interact with the database + hosted APIs, and even write working code for you.
329
+
308
330
  ## Contributing
309
331
 
310
332
  - Clone this repository somewhere in your file system
311
- - `pip3 install [path to this repository]`
333
+ - `uv tool install [path to repository] -e`
@@ -0,0 +1 @@
1
+ uv build
@@ -10,8 +10,8 @@
10
10
  # }
11
11
  #
12
12
  # cli_dev_off() {
13
- # export PATH=${PATH#$HOME/src/gibson/cli/bin:}
14
- # export PYTHONPATH=${PYTHONPATH#:$HOME/src/gibson/cli:}
13
+ # export PATH=${PATH//$HOME\/src\/gibson\/cli\/bin:/}
14
+ # export PYTHONPATH=${PYTHONPATH//$HOME\/src\/gibson\/cli:/}
15
15
  # }
16
16
 
17
17
  import re
@@ -0,0 +1,5 @@
1
+ sh bin/clean.sh
2
+ sh bin/build.sh
3
+ uv publish
4
+ # python3 -m twine upload --repository pypi dist/*
5
+ sh bin/clean.sh
@@ -1,4 +1,3 @@
1
- import os
2
1
  import pprint
3
2
 
4
3
  import requests
@@ -16,7 +15,17 @@ class BaseApi:
16
15
  def base_url(self):
17
16
  return f"{self.configuration.api_domain()}/{self.VERSION}"
18
17
 
19
- def get(self, endpoint):
18
+ def delete(self, endpoint):
19
+ r = requests.delete(self.url(endpoint), headers=self.headers())
20
+
21
+ if r.status_code == 401 and self.refresh_auth_tokens():
22
+ r = requests.delete(self.url(endpoint), headers=self.headers())
23
+
24
+ self.__raise_for_status(r)
25
+
26
+ return r
27
+
28
+ def get(self, endpoint: str = ""):
20
29
  r = requests.get(self.url(endpoint), headers=self.headers())
21
30
 
22
31
  if r.status_code == 401 and self.refresh_auth_tokens():
@@ -37,7 +46,17 @@ class BaseApi:
37
46
 
38
47
  return headers
39
48
 
40
- def post(self, endpoint, json: dict):
49
+ def patch(self, endpoint: str = "", json: dict = None):
50
+ r = requests.patch(self.url(endpoint), headers=self.headers(), json=json)
51
+
52
+ if r.status_code == 401 and self.refresh_auth_tokens():
53
+ r = requests.patch(self.url(endpoint), headers=self.headers(), json=json)
54
+
55
+ self.__raise_for_status(r)
56
+
57
+ return r
58
+
59
+ def post(self, endpoint: str = "", json: dict = None):
41
60
  r = requests.post(self.url(endpoint), headers=self.headers(), json=json)
42
61
 
43
62
  if r.status_code == 401 and self.refresh_auth_tokens():
@@ -47,7 +66,7 @@ class BaseApi:
47
66
 
48
67
  return r
49
68
 
50
- def put(self, endpoint, json: dict):
69
+ def put(self, endpoint: str = "", json: dict = None):
51
70
  r = requests.put(self.url(endpoint), headers=self.headers(), json=json)
52
71
 
53
72
  if r.status_code == 401 and self.refresh_auth_tokens():
@@ -78,10 +97,9 @@ class BaseApi:
78
97
  )
79
98
  return True
80
99
 
81
- def url(self, endpoint):
82
- if self.PREFIX:
83
- return f"{self.base_url()}/{self.PREFIX}/{endpoint}"
84
- return f"{self.base_url()}/{endpoint}"
100
+ def url(self, endpoint: str):
101
+ base = f"{self.base_url()}/{self.PREFIX}" if self.PREFIX else self.base_url()
102
+ return f"{base}/{endpoint}" if endpoint else base
85
103
 
86
104
  def __raise_for_status(self, r):
87
105
  if r.status_code == 401:
@@ -0,0 +1,46 @@
1
+ from gibson.api.BaseApi import BaseApi
2
+ from gibson.core.Configuration import Configuration
3
+
4
+
5
+ class ProjectApi(BaseApi):
6
+ PREFIX = "project"
7
+
8
+ def __init__(self, configuration: Configuration):
9
+ self.configuration = configuration
10
+ self.configuration.require_login()
11
+
12
+ def list(self):
13
+ return self.get()["projects"]
14
+
15
+ def create(self):
16
+ return self.post().json()
17
+
18
+ def database_schema(self, uuid: str):
19
+ return self.get(f"{uuid}/schema/deployed")
20
+
21
+ def lookup(self, uuid: str):
22
+ return self.get(f"{uuid}")
23
+
24
+ def deploy(self, uuid: str):
25
+ return self.post(f"{uuid}/deploy")
26
+
27
+ def mcp(self, uuid: str):
28
+ return self.get(f"{uuid}/mcp")
29
+
30
+ def schema(self, uuid: str):
31
+ return self.get(f"{uuid}/schema")
32
+
33
+ def structure(self, uuid: str):
34
+ return self.get(f"{uuid}/structure")
35
+
36
+ def submit_message(self, uuid: str, message: str):
37
+ if not message:
38
+ raise ValueError("Message is required")
39
+
40
+ return self.post(f"{uuid}/conversation", {"content": message}).json()
41
+
42
+ def update(self, uuid: str, name: str):
43
+ if not name:
44
+ raise ValueError("Name is required")
45
+
46
+ return self.patch(f"{uuid}", {"name": name}).json()
@@ -10,7 +10,7 @@ class Version(BaseCommand):
10
10
  try:
11
11
  r = requests.get("https://pypi.org/pypi/gibson-cli/json")
12
12
  latest_version = r.json()["info"]["version"]
13
- except:
13
+ except Exception:
14
14
  latest_version = VersionConf.num
15
15
 
16
16
  if latest_version != VersionConf.num:
@@ -186,10 +186,10 @@ class Entity(BaseCommand):
186
186
 
187
187
  def __render_workspace(
188
188
  self,
189
- original_entity: StructureEntity | None,
189
+ original_entity: StructureEntity,
190
190
  entity: StructureEntity,
191
191
  model_name: str,
192
- original_model_code: str | None,
192
+ original_model_code: str,
193
193
  model_code: str,
194
194
  ):
195
195
  self.configuration.platform.cmd_clear()
@@ -13,7 +13,7 @@ class Projects(BaseCommand):
13
13
  self.configuration.require_login()
14
14
 
15
15
  with DisappearingSpinner():
16
- projects = ProjectApi(self.configuration).all_projects()
16
+ projects = ProjectApi(self.configuration).list()
17
17
 
18
18
  if len(projects) == 0:
19
19
  self.conversation.type(
@@ -235,6 +235,10 @@ class Configuration:
235
235
  self.require_project()
236
236
  return self.settings[self.project.name]
237
237
 
238
+ def get_project_id(self):
239
+ self.require_project()
240
+ return self.project.id
241
+
238
242
  def get_refresh_token(self):
239
243
  try:
240
244
  with open(f"{self.paths.auth}/{self.API_ENV}", "r") as f:
@@ -329,6 +333,16 @@ class Configuration:
329
333
 
330
334
  return self
331
335
 
336
+ def require_project_id(self) -> str:
337
+ project_id = self.get_project_id()
338
+ if not project_id:
339
+ self.conversation.type(
340
+ "A valid project ID is required to perform this action. Please ensure the project ID is set in your configuration.\n"
341
+ )
342
+ exit(1)
343
+
344
+ return project_id
345
+
332
346
  def require_project_key_or_id(self):
333
347
  if self.project.id:
334
348
  return self
@@ -105,7 +105,7 @@ class Conversation:
105
105
 
106
106
  def message_customize_settings(self):
107
107
  self.type(
108
- f"You can edit the configuration file directly or ask me to do it for you.\n"
108
+ "You can edit the configuration file directly or ask me to do it for you.\n"
109
109
  )
110
110
  self.type(
111
111
  "I will not be able to do much until you modify api::key and "
@@ -220,7 +220,7 @@ class Conversation:
220
220
 
221
221
  def project_api_key_not_set(self, configuration):
222
222
  self.type(
223
- f"\nYou have not set the API key for your project. Please set the API key by executing:\n"
223
+ "\nYou have not set the API key for your project. Please set the API key by executing:\n"
224
224
  )
225
225
  self.newline()
226
226
  self.type(
@@ -0,0 +1,87 @@
1
+ from typing import Dict, List
2
+
3
+ from mcp.server.fastmcp import FastMCP
4
+
5
+ from gibson.api.ProjectApi import ProjectApi
6
+ from gibson.core.Configuration import Configuration
7
+
8
+ mcp = FastMCP("GibsonAI")
9
+
10
+ project_api = ProjectApi(Configuration())
11
+
12
+ # Note: Resources are not yet supported by Cursor, everything must be implemented as a tool
13
+ # See https://docs.cursor.com/context/model-context-protocol#limitations
14
+
15
+
16
+ @mcp.tool()
17
+ def get_projects() -> List[Dict]:
18
+ """Get all GibsonAI projects"""
19
+ return project_api.list()
20
+
21
+
22
+ @mcp.tool()
23
+ def create_project() -> Dict:
24
+ """Create a new GibsonAI project"""
25
+ return project_api.create()
26
+
27
+
28
+ @mcp.tool()
29
+ def get_project_details(uuid: str) -> Dict:
30
+ """Get a GibsonAI project's details"""
31
+ return project_api.lookup(uuid=uuid)
32
+
33
+
34
+ @mcp.tool()
35
+ def get_project_hosted_api_details(uuid: str) -> str:
36
+ """
37
+ Get a GibsonAI project's hosted API details
38
+ This includes necessary context for an LLM to understand and generate API calls related to fetching or modifying the project's data
39
+ """
40
+ return project_api.mcp(uuid=uuid)
41
+
42
+
43
+ @mcp.tool()
44
+ def update_project(uuid: str, project_name: str) -> Dict:
45
+ """
46
+ Update a GibsonAI project's details
47
+ This currently only updates the project's name
48
+ Returns the updated project details
49
+ """
50
+ return project_api.update(uuid=uuid, name=project_name)
51
+
52
+
53
+ @mcp.tool()
54
+ def submit_data_modeling_request(uuid: str, data_modeling_request: str) -> Dict:
55
+ """
56
+ Submit a data modeling request for a GibsonAI project
57
+ This tool fully handles all data modeling, you should provide the user's request as-is
58
+ Returns the response from the LLM
59
+ """
60
+ return project_api.submit_message(uuid=uuid, message=data_modeling_request)
61
+
62
+
63
+ @mcp.tool()
64
+ def deploy_project(uuid: str) -> None:
65
+ """
66
+ Deploy a GibsonAI project's hosted databases
67
+ This deploys both the development and production databases simultaneously and automatically handles the migrations
68
+ """
69
+ project_api.deploy(uuid=uuid)
70
+
71
+
72
+ @mcp.tool()
73
+ def get_project_schema(uuid: str) -> str:
74
+ """
75
+ Get the schema for a GibsonAI project
76
+ This includes any changes made to the schema since the last deployment
77
+ """
78
+ return project_api.schema(uuid=uuid)
79
+
80
+
81
+ @mcp.tool()
82
+ def get_deployed_schema(uuid: str) -> str:
83
+ """
84
+ Get the deployed schema for a GibsonAI project
85
+ This is the schema that is currently live on the project's hosted databases
86
+ """
87
+ return project_api.database_schema(uuid=uuid)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gibson-cli
3
- Version: 0.7.8
3
+ Version: 0.8.1
4
4
  Summary: Gibson Command Line Interface
5
5
  Author-email: GibsonAI <noc@gibsonai.com>
6
6
  Project-URL: Homepage, https://gibsonai.com/
@@ -39,7 +39,7 @@ Requires-Dist: markupsafe==2.1.5
39
39
  Requires-Dist: mcp==1.6.0
40
40
  Requires-Dist: mdurl==0.1.2
41
41
  Requires-Dist: orjson==3.10.3
42
- Requires-Dist: packaging==23.2
42
+ Requires-Dist: packaging==24.2
43
43
  Requires-Dist: pluggy==1.4.0
44
44
  Requires-Dist: pydantic==2.11.0
45
45
  Requires-Dist: pydantic-core==2.33.0
@@ -73,36 +73,39 @@ Requires-Dist: watchfiles==0.21.0
73
73
  Requires-Dist: websockets==12.0
74
74
  Requires-Dist: yaspin==3.1.0
75
75
 
76
-
77
76
  [![GibsonAI](https://github.com/user-attachments/assets/26bc1002-f878-4995-a6c5-eb8d5eb69c28)](https://gibsonai.com/)
78
77
 
79
78
  # Gibson CLI
80
79
 
81
80
  [![PyPI - Version](https://img.shields.io/pypi/v/gibson-cli)](https://pypi.org/project/gibson-cli/)
82
- ![Python 3.9+](https://img.shields.io/badge/Python-3.9%2B-blue)
81
+ ![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue)
83
82
  [![Docs](https://img.shields.io/badge/Docs-https://docs.gibsonai.com-green)](https://docs.gibsonai.com)
84
83
 
85
84
  ## Prerequisites
86
85
 
87
- Gibson currently works on projects that use Python 3.9 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
86
+ Gibson currently works on projects that use Python 3.10 or greater, MySQL, SQLAlchemy, Pydantic, Alembic, FastAPI and pytest. It is capable of building a complete application, from database to API end points, using these frameworks. Future enhancements of Gibson will include support for more languages and frameworks.
88
87
 
89
88
  Portions of the Gibson backend code are written by Gibson. So far, versus a human developer, it has coded 66% of the software and did so in seconds. To get started, read the instructions here.
90
89
 
91
90
  ## Installation / Upgrading
92
91
 
93
- Install the latest version of the CLI using `pip`
92
+ ### With [uv](https://docs.astral.sh/uv/) (recommended)
94
93
 
95
94
  ```sh
96
- pip3 install gibson-cli --upgrade
95
+ uv tool install gibson-cli@latest
97
96
  ```
98
97
 
99
- Note: the first time you install any package from PyPI via `pip` that includes an executable, it is placed in a directory that is likely not in your `PATH`. There are a number of ways to do this, but one method is to run the following command:
98
+ If you're unable to run `gibson` after installing with uv, try running `uv tool update-shell` to ensure your `PATH` includes the uv tool executables directory.
99
+
100
+ ### With pip
100
101
 
101
102
  ```sh
102
- echo 'export PATH="$PATH:${$(which python3)%python3}"' >> ~/.zshrc # or ~/.bashrc
103
+ pip3 install gibson-cli --upgrade
103
104
  ```
104
105
 
105
- You will only need to do this once.
106
+ Note: you'll want to run this **outside** of a virtual environment (globally on your machine)
107
+
108
+ If you're unable to run `gibson` after installing with pip, ensure your `PATH` contains the directory where pip installs executables. This can differ based on your operating system, python installation location, and pip version.
106
109
 
107
110
  ## Key Terms
108
111
 
@@ -196,7 +199,7 @@ All of Gibson's configuration files and caches are stored in `$HOME/.gibson`. Us
196
199
 
197
200
  ## Currently Supported Software
198
201
 
199
- - Python 3.9 or greater
202
+ - Python 3.10 or greater
200
203
  - MySQL
201
204
  - SQLAlchemy
202
205
  - Pydantic
@@ -380,7 +383,26 @@ At the moment, just refer to the base-level schema directly.
380
383
  - e.g. `gibson q add nickname to sql://user`
381
384
  - `gibson code model user`
382
385
 
386
+ ### Setting up the MCP server with Cursor
387
+
388
+ Head over to `Cursor Settings` > `MCP` and click `Add new MCP server`
389
+
390
+ Update the configuration to look like the following:
391
+
392
+ ```json
393
+ {
394
+ "mcpServers": {
395
+ "gibson": {
396
+ "command": "uvx",
397
+ "args": ["--from", "gibson-cli@latest", "gibson", "mcp", "run"]
398
+ }
399
+ }
400
+ }
401
+ ```
402
+
403
+ That's it! Just make sure you're logged in to the CLI (if you're reading this, you've likely already run `gibson auth login`) and then Cursor's agents will have access to the Gibson MCP server to create + update projects on your behalf, explain how to interact with the database + hosted APIs, and even write working code for you.
404
+
383
405
  ## Contributing
384
406
 
385
407
  - Clone this repository somewhere in your file system
386
- - `pip3 install [path to this repository]`
408
+ - `uv tool install [path to repository] -e`
@@ -23,7 +23,7 @@ markupsafe==2.1.5
23
23
  mcp==1.6.0
24
24
  mdurl==0.1.2
25
25
  orjson==3.10.3
26
- packaging==23.2
26
+ packaging==24.2
27
27
  pluggy==1.4.0
28
28
  pydantic==2.11.0
29
29
  pydantic-core==2.33.0
@@ -1,5 +1,4 @@
1
1
  bin
2
- build
3
2
  dist
4
3
  gibson
5
4
  venv
@@ -15,7 +15,7 @@ classifiers = [
15
15
  "Intended Audience :: Developers",
16
16
  "Programming Language :: Python :: 3.10",
17
17
  ]
18
- version = "0.7.8"
18
+ version = "0.8.1"
19
19
 
20
20
  [tool.setuptools.packages.find]
21
21
  where = ["."]
@@ -23,7 +23,7 @@ markupsafe==2.1.5
23
23
  mcp==1.6.0
24
24
  mdurl==0.1.2
25
25
  orjson==3.10.3
26
- packaging==23.2
26
+ packaging==24.2
27
27
  pluggy==1.4.0
28
28
  pydantic==2.11.0
29
29
  pydantic-core==2.33.0
@@ -1,2 +0,0 @@
1
- rm -rf dist gibson_cli.egg-info
2
- python3 -m build
@@ -1 +0,0 @@
1
- python3 -m twine upload --repository pypi dist/*
@@ -1,13 +0,0 @@
1
- from gibson.api.BaseApi import BaseApi
2
- from gibson.core.Configuration import Configuration
3
-
4
-
5
- class ProjectApi(BaseApi):
6
- PREFIX = "project"
7
-
8
- def __init__(self, configuration: Configuration):
9
- self.configuration = configuration
10
- self.configuration.require_login()
11
-
12
- def all_projects(self):
13
- return self.get("all")["projects"]
@@ -1,13 +0,0 @@
1
- import os
2
-
3
- from mcp.server.fastmcp import FastMCP
4
-
5
- mcp = FastMCP("GibsonAI")
6
-
7
- # Note: Resources are not yet supported by Cursor, everything must be implemented as a tool
8
-
9
-
10
- @mcp.tool()
11
- def get_project_name() -> str:
12
- """Get the gibson project name"""
13
- return os.environ.get("GIBSONAI_PROJECT")
File without changes
File without changes
File without changes
File without changes
File without changes