Skip to content

Commit 55b20c2

Browse files
crumplecupCopilot
andcommitted
docs: add READMEs for 8 crates missing documentation
elicit_geojson, elicit_georaster, elicit_proj, elicit_rstar, elicit_wgpu, elicit_winit, elicit_wkb, elicit_wkt Also adds readme = "README.md" to elicit_wgpu and elicit_winit Cargo.toml, and switches elicit_proj/elicit_rstar from readme.workspace to local readme field. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4d307bc commit 55b20c2

12 files changed

Lines changed: 400 additions & 2 deletions

File tree

crates/elicit_geojson/README.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# elicit_geojson
2+
3+
`elicit_geojson` is the [elicitation] shadow crate for the [geojson] crate. It mirrors the upstream
4+
document/value surface — `GeoJson`, `Geometry`, `Value`, `Feature`, `FeatureCollection`, and
5+
`feature::Id` — and exposes them as MCP-compatible types with four workflow plugins.
6+
7+
## Plugins
8+
9+
| Plugin | Namespace | Description |
10+
|---|---|---|
11+
| `GeoJsonDocumentPlugin` | `geojson_document__*` | Parse and inspect top-level GeoJSON documents |
12+
| `GeoJsonGeometryPlugin` | `geojson_geometry__*` | Construct and inspect `Geometry` / `Value` |
13+
| `GeoJsonFeaturePlugin` | `geojson_feature__*` | Construct and inspect `Feature` / `FeatureCollection` / `Id` |
14+
| `GeoJsonConversionPlugin` | `geojson_conversion__*` | Bridge GeoJSON wrappers to and from `elicit_geo_types` |
15+
16+
## Shadow crate concept
17+
18+
`elicit_geojson` shares the familiar type names of the `geojson` crate but exposes them as
19+
serializable, MCP-boundary-safe descriptors. An agent constructs and inspects GeoJSON values
20+
through these tools; no raw file I/O or streaming parser state crosses the boundary.
21+
22+
## Usage
23+
24+
```toml
25+
[dependencies]
26+
elicit_geojson = "0.11"
27+
```
28+
29+
```rust
30+
use elicit_geojson::{
31+
GeoJsonDocumentPlugin, GeoJsonFeaturePlugin,
32+
GeoJsonGeometryPlugin, GeoJsonConversionPlugin,
33+
};
34+
35+
let server = server
36+
.register_plugin(GeoJsonDocumentPlugin::new())
37+
.register_plugin(GeoJsonGeometryPlugin::new())
38+
.register_plugin(GeoJsonFeaturePlugin::new())
39+
.register_plugin(GeoJsonConversionPlugin::new());
40+
```
41+
42+
[elicitation]: https://crates.io/crates/elicitation
43+
[geojson]: https://crates.io/crates/geojson

crates/elicit_georaster/README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# elicit_georaster
2+
3+
`elicit_georaster` is the [elicitation] shadow crate for the [georaster] GeoTIFF reader. It mirrors
4+
the current upstream surface — `Coordinate`, `GeoTiffReader`, `ImageInfo`, `Pixels`, and
5+
`RasterValue` — and exposes them as MCP-compatible types with two workflow plugins.
6+
7+
## Plugins
8+
9+
| Plugin | Namespace | Description |
10+
|---|---|---|
11+
| `GeoTiffReaderPlugin` | `geotiff_reader__*` | Open and configure readers; inspect image metadata |
12+
| `GeoTiffSamplingPlugin` | `geotiff_sampling__*` | Read pixels, convert coordinates, collect windows |
13+
14+
## Shadow crate concept
15+
16+
`elicit_georaster` shares the familiar type names of the `georaster` crate but exposes them as
17+
serializable, MCP-boundary-safe descriptors. An agent can describe raster data sources and sampling
18+
operations without holding live file handles or GPU-resident buffers across the MCP boundary.
19+
20+
## Usage
21+
22+
```toml
23+
[dependencies]
24+
elicit_georaster = "0.11"
25+
```
26+
27+
```rust
28+
use elicit_georaster::{GeoTiffReaderPlugin, GeoTiffSamplingPlugin};
29+
30+
let server = server
31+
.register_plugin(GeoTiffReaderPlugin::new())
32+
.register_plugin(GeoTiffSamplingPlugin::new());
33+
```
34+
35+
[elicitation]: https://crates.io/crates/elicitation
36+
[georaster]: https://crates.io/crates/georaster

crates/elicit_proj/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ repository.workspace = true
77
authors.workspace = true
88
homepage.workspace = true
99
documentation.workspace = true
10-
readme.workspace = true
10+
readme = "README.md"
1111
description = "Elicitation-enabled proj shadow crate — MCP tools for coordinate reference system and projection descriptors"
1212
keywords = ["mcp", "proj", "geo", "elicitation", "gis"]
1313
categories = ["science", "geospatial"]

crates/elicit_proj/README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# elicit_proj
2+
3+
`elicit_proj` is the [elicitation] shadow crate for the [proj] coordinate transformation library.
4+
It provides a serializable [`ProjTransform`] snapshot wrapper around `proj::Proj` and one MCP
5+
workflow plugin for creating transforms and converting coordinates and geometries between CRS.
6+
7+
## Plugin
8+
9+
| Plugin | Namespace | Description |
10+
|---|---|---|
11+
| `ProjTransformPlugin` | `proj__*` | Create transforms, convert coordinates, project geometries, transform bounds |
12+
13+
## Tool reference
14+
15+
| Tool | Description | Establishes |
16+
|---|---|---|
17+
| `create_from_proj_string` | Create a transform from a PROJ string definition | `ProjCreated` |
18+
| `create_from_known_crs` | Create a transform between two known CRS identifiers (e.g. `EPSG:4326`) | `ProjCreated` |
19+
| `convert_coord` | Convert a single coordinate from source CRS to target CRS ||
20+
| `project_coord` | Project a coordinate to/from the projection plane ||
21+
| `convert_geometry` | Convert all coordinates in a geometry from source CRS to target CRS ||
22+
| `transform_bounds` | Transform a bounding box between CRS, densifying edges for accuracy ||
23+
| `definition` | Return the PROJ definition string for a transform snapshot ||
24+
25+
## Usage
26+
27+
```toml
28+
[dependencies]
29+
elicit_proj = "0.11"
30+
```
31+
32+
```rust
33+
use elicit_proj::ProjTransformPlugin;
34+
35+
let server = server.register_plugin(ProjTransformPlugin::new());
36+
```
37+
38+
[elicitation]: https://crates.io/crates/elicitation
39+
[proj]: https://crates.io/crates/proj
40+
[`ProjTransform`]: https://docs.rs/elicit_proj/latest/elicit_proj/struct.ProjTransform.html

crates/elicit_rstar/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ repository.workspace = true
77
authors.workspace = true
88
homepage.workspace = true
99
documentation.workspace = true
10-
readme.workspace = true
10+
readme = "README.md"
1111
description = "Elicitation-enabled rstar shadow crate — MCP tools for R*-tree spatial index descriptors"
1212
keywords = ["mcp", "rstar", "spatial", "elicitation", "geo"]
1313
categories = ["science", "data-structures"]

crates/elicit_rstar/README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# elicit_rstar
2+
3+
`elicit_rstar` is the [elicitation] shadow crate for the [rstar] R\*-tree spatial index library.
4+
It provides factory-driven dynamic MCP tool support for `rstar::RTree<T>`, keeping the runtime API
5+
generic over the stored item type while using elicitable wrappers for the built-in 2D rstar
6+
primitives.
7+
8+
## Dynamic factories
9+
10+
Two capability-based factories are provided based on the bounds the stored item type implements:
11+
12+
| Factory | Item bound | Tools |
13+
|---|---|---|
14+
| `RTreeObjectFactory` | `T: ElicitComplete + RTreeObject<Envelope = AABB<[f64; 2]>>` | `new`, `bulk_load`, `size`, `items`, `insert`, `locate_in_envelope`, `locate_in_envelope_intersecting` |
15+
| `PointDistanceFactory` | above + `PointDistance` | all above plus `nearest_neighbor`, `nearest_neighbors`, `locate_all_at_point`, `locate_within_distance` |
16+
17+
## Usage
18+
19+
Register a tree snapshot type with the dynamic registry, prime the matching factory, then
20+
instantiate the factory meta-tool:
21+
22+
```rust
23+
use elicit_rstar::{RstarTree, prime_point_distance_tree, prime_rtree_object_tree};
24+
use elicitation::{DynamicToolRegistry, RstarRectangle};
25+
26+
prime_rtree_object_tree::<RstarRectangle>();
27+
prime_point_distance_tree::<RstarRectangle>();
28+
29+
let registry = DynamicToolRegistry::new()
30+
.register_type::<RstarTree<RstarRectangle>>("rect_tree");
31+
```
32+
33+
Built-in tree aliases for the standard 2D rstar primitives:
34+
35+
| Alias | Item type |
36+
|---|---|
37+
| `RstarTree<T>` | Generic tree snapshot |
38+
| `RectangleTree` | `RstarTree<RstarRectangle>` |
39+
| `LineTree` | `RstarTree<RstarLine>` |
40+
41+
```toml
42+
[dependencies]
43+
elicit_rstar = "0.11"
44+
```
45+
46+
[elicitation]: https://crates.io/crates/elicitation
47+
[rstar]: https://crates.io/crates/rstar

crates/elicit_wgpu/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ repository.workspace = true
77
authors.workspace = true
88
homepage.workspace = true
99
documentation.workspace = true
10+
readme = "README.md"
1011
description = "Elicitation-enabled wgpu code-generation tools for GPU descriptor construction"
1112
keywords = ["mcp", "wgpu", "gpu", "rendering", "elicitation"]
1213
categories = ["graphics", "rendering", "development-tools"]

crates/elicit_wgpu/README.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# elicit_wgpu
2+
3+
`elicit_wgpu` is the [elicitation] shadow crate for [wgpu]. All tools are **emit-only**: they
4+
generate idiomatic Rust code snippets for GPU applications. No GPU device is created or accessed
5+
at runtime — no `wgpu::Device`, surface, or buffer lives in the MCP server process.
6+
7+
## Plugins
8+
9+
| Plugin | Namespace | Tools | Coverage |
10+
|---|---|---|---|
11+
| `WgpuInitPlugin` | `wgpu_init__*` | 4 | Instance, adapter, device, surface configuration |
12+
| `WgpuResourcePlugin` | `wgpu_resource__*` | 3 | Buffer, texture, and sampler descriptors |
13+
| `WgpuPipelinePlugin` | `wgpu_pipeline__*` | 4 | Render pipeline state descriptors |
14+
| `WgpuShaderPlugin` | `wgpu_shader__*` | 3 | Shader module and vertex/fragment stage |
15+
| `WgpuComputePlugin` | `wgpu_compute__*` | 3 | Compute pipeline, dispatch, bind group layout |
16+
17+
## Tool reference
18+
19+
### `wgpu_init__*`
20+
21+
| Tool | Description |
22+
|---|---|
23+
| `instance` | Generate code to create a `wgpu::Instance` |
24+
| `adapter_request` | Generate `instance.request_adapter(...)` code |
25+
| `device_request` | Generate `adapter.request_device(...)` code yielding `(Device, Queue)` |
26+
| `surface_config` | Generate a `wgpu::SurfaceConfiguration` struct literal |
27+
28+
### `wgpu_resource__*`
29+
30+
| Tool | Description |
31+
|---|---|
32+
| `buffer_desc` | Generate a `wgpu::BufferDescriptor` struct literal |
33+
| `texture_desc` | Generate a `wgpu::TextureDescriptor` struct literal |
34+
| `sampler_desc` | Generate a `wgpu::SamplerDescriptor` struct literal |
35+
36+
### `wgpu_pipeline__*`
37+
38+
| Tool | Description |
39+
|---|---|
40+
| `primitive_state` | Generate a `wgpu::PrimitiveState` for rasterization configuration |
41+
| `blend_state` | Generate a `wgpu::BlendState` with color and alpha blend components |
42+
| `color_target_state` | Generate a `wgpu::ColorTargetState` for a render pass attachment |
43+
| `render_pipeline_desc` | Generate a `wgpu::RenderPipelineDescriptor` block |
44+
45+
### `wgpu_shader__*`
46+
47+
| Tool | Description |
48+
|---|---|
49+
| `module_inline` | Generate code to create a `wgpu::ShaderModule` from an inline WGSL string |
50+
| `vertex_state` | Generate a `wgpu::VertexState` referencing a shader module variable |
51+
| `fragment_state` | Generate a `wgpu::FragmentState` referencing a shader module and targets |
52+
53+
### `wgpu_compute__*`
54+
55+
| Tool | Description |
56+
|---|---|
57+
| `pipeline_desc` | Generate a `wgpu::ComputePipelineDescriptor` code block |
58+
| `dispatch` | Generate a `compute_pass.dispatch_workgroups(x, y, z)` call |
59+
| `bind_group_layout_entry` | Generate a `wgpu::BindGroupLayoutEntry` for a buffer binding |
60+
61+
## Usage
62+
63+
```toml
64+
[dependencies]
65+
elicit_wgpu = "0.11"
66+
```
67+
68+
```rust
69+
use elicit_wgpu::{
70+
WgpuInitPlugin, WgpuResourcePlugin,
71+
WgpuPipelinePlugin, WgpuShaderPlugin, WgpuComputePlugin,
72+
};
73+
74+
let server = server
75+
.register_plugin(WgpuInitPlugin::new())
76+
.register_plugin(WgpuResourcePlugin::new())
77+
.register_plugin(WgpuPipelinePlugin::new())
78+
.register_plugin(WgpuShaderPlugin::new())
79+
.register_plugin(WgpuComputePlugin::new());
80+
```
81+
82+
[elicitation]: https://crates.io/crates/elicitation
83+
[wgpu]: https://crates.io/crates/wgpu

crates/elicit_winit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ repository.workspace = true
77
authors.workspace = true
88
homepage.workspace = true
99
documentation.workspace = true
10+
readme = "README.md"
1011
description = "Elicitation-enabled winit code-generation tools for windowing and input"
1112
keywords = ["mcp", "winit", "windowing", "input", "elicitation"]
1213
categories = ["gui", "os", "development-tools"]

crates/elicit_winit/README.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# elicit_winit
2+
3+
`elicit_winit` is the [elicitation] shadow crate for [winit]. All tools are **emit-only**: they
4+
generate idiomatic Rust code snippets for native windowing applications. No windows are created at
5+
runtime — no `winit::Window` or `EventLoop` lives in the MCP server process.
6+
7+
## Plugins
8+
9+
| Plugin | Namespace | Tools | Coverage |
10+
|---|---|---|---|
11+
| `WinitWindowPlugin` | `winit_window__*` | 8 | Window creation and runtime configuration |
12+
| `WinitEventPlugin` | `winit_event__*` | 7 | Event loop and `ApplicationHandler` impl |
13+
| `WinitInputPlugin` | `winit_input__*` | 7 | Keyboard, mouse, touch, and cursor input |
14+
15+
## Tool reference
16+
17+
### `winit_window__*`
18+
19+
| Tool | Description |
20+
|---|---|
21+
| `attributes` | Generate a `WindowAttributes` builder chain |
22+
| `set_title` | Generate code to update a window's title bar text at runtime |
23+
| `set_visible` | Generate code to show or hide a window |
24+
| `set_resizable` | Generate code to enable or disable user resizing |
25+
| `set_decorations` | Generate code to toggle window decorations |
26+
| `set_fullscreen` | Generate code to enter or exit fullscreen |
27+
| `set_inner_size` | Generate code to resize the window's client area |
28+
| `set_min_inner_size` | Generate code to constrain the minimum window size |
29+
30+
### `winit_event__*`
31+
32+
| Tool | Description |
33+
|---|---|
34+
| `app_skeleton` | Generate a complete `ApplicationHandler` impl skeleton |
35+
| `event_loop` | Generate the `main` function body creating an `EventLoop` and running an application |
36+
| `resumed_handler` | Generate a `resumed` handler body |
37+
| `window_event_handler` | Generate a `window_event` handler body |
38+
| `device_event_handler` | Generate a `device_event` handler body |
39+
| `about_to_wait_handler` | Generate an `about_to_wait` handler body |
40+
| `exiting_handler` | Generate an `exiting` handler body |
41+
42+
### `winit_input__*`
43+
44+
| Tool | Description |
45+
|---|---|
46+
| `keyboard_handler` | Generate a `WindowEvent::KeyboardInput` match arm for a physical key code |
47+
| `named_key_handler` | Generate a `WindowEvent::KeyboardInput` match arm for a `NamedKey` variant |
48+
| `mouse_button_handler` | Generate a `WindowEvent::MouseInput` match arm |
49+
| `cursor_moved_handler` | Generate a `WindowEvent::CursorMoved` handler |
50+
| `mouse_wheel_handler` | Generate a `WindowEvent::MouseWheel` handler |
51+
| `touch_handler` | Generate a `WindowEvent::Touch` handler |
52+
| `ime_handler` | Generate a `WindowEvent::Ime` handler |
53+
54+
## Usage
55+
56+
```toml
57+
[dependencies]
58+
elicit_winit = "0.11"
59+
```
60+
61+
```rust
62+
use elicit_winit::{WinitWindowPlugin, WinitEventPlugin, WinitInputPlugin};
63+
64+
let server = server
65+
.register_plugin(WinitWindowPlugin::new())
66+
.register_plugin(WinitEventPlugin::new())
67+
.register_plugin(WinitInputPlugin::new());
68+
```
69+
70+
[elicitation]: https://crates.io/crates/elicitation
71+
[winit]: https://crates.io/crates/winit

0 commit comments

Comments
 (0)