Skip to content

Conversation

@perrozzi
Copy link
Contributor

@perrozzi perrozzi commented Sep 5, 2025

The current documentation provides a solid foundation with excellent API references and core concepts. This PR extends that work by adding practical guides and examples that help users implement UTCP more easily.

📋 Enhancements Made

Commit 1: Expand documentation coverage

• ✅ Added protocol-specific guides (HTTP, WebSocket, SSE, CLI, Text, MCP) with practical examples
• ✅ Created implementation guide with step-by-step instructions and multi-language references
• ✅ Added tool provider guide with real-world scenarios
• ✅ Included migration guide to help users transition from v0.1 to v1.0
• ✅ Improved sidebar organization for better navigation

Commit 2: Enhance core documentation pages

• ✅ Expanded landing page with clearer user paths and quick start examples
• ✅ Enhanced security documentation with protocol-specific guidance and code samples
• ✅ Improved UTCP vs MCP comparison with additional technical details and migration options
• ✅ Added consistent language notes to clarify Python examples while noting multi-language support

🚀 Value Added

Comprehensive protocol coverage with practical implementation examples
Clear user journeys for different types of implementers
Enhanced security guidance with actionable best practices
Migration support for users upgrading between versions
Better navigation and cross-references throughout

📖 New Documentation Structure

docs/
├── index.md (enhanced with quick start and navigation)
├── for-tool-providers.md (new practical guide)
├── implementation.md (new comprehensive guide)
├── security.md (expanded with protocol-specific guidance)
├── utcp-vs-mcp.md (enhanced with technical details)
├── migration-v0.1-to-v1.0.md (new migration guide)
└── providers/ (new directory with protocol guides)
├── index.md, http.md, websocket.md, sse.md
├── cli.md, text.md, mcp.md

These additions complement the existing excellent API documentation and provide the practical guidance needed for successful UTCP implementations across different use cases and experience levels.


Summary by cubic

Expanded v1.0 docs with protocol guides, implementation and provider manuals, and stronger security and migration content to make UTCP easier to implement and adopt. Reorganized the landing page and sidebar for clearer navigation and faster onboarding.

  • New Features
    • Added protocol guides: HTTP, WebSocket, SSE, CLI, Text, MCP (with call templates and examples).
    • New Implementation and Tool Provider guides with step-by-step setup and multi-language references.
    • Expanded Security docs with protocol-specific guidance and code samples.
    • Improved UTCP vs MCP comparison with a decision framework and migration options.
    • Added v0.1 → v1.0 Migration guide; updated landing page and sidebar for clearer navigation.

h3xxit and others added 7 commits September 4, 2025 13:56
Add Hall of Fame
- Add complete communication protocols documentation (HTTP, WebSocket, SSE, CLI, Text, MCP)
- Add implementation guide with Python examples and multi-language references
- Add for-tool-providers guide with practical examples
- Add migration guide from v0.1 to v1.0
- Update sidebar navigation structure
- Address incomplete current version documentation gap
- Rewrite docs/index.md with better structure, clear value proposition, and navigation
- Enhance docs/security.md with comprehensive protocol-specific security guidance
- Improve docs/utcp-vs-mcp.md with technical depth, migration guidance, and decision framework
- Add language specification notes consistently across documentation
- Include practical examples and cross-references throughout
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

24 issues found across 14 files

React with 👍 or 👎 to teach cubic. You can also tag @cubic-dev-ai to give feedback, ask questions, or re-run the review.

"input_file": {"type": "string"},
"output_format": {"type": "string", "enum": ["json", "csv"]}
},
"required": ["input_file"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

output_format is referenced in args but not marked required, which can produce invalid calls when omitted; either require it or make the flag conditional.

Prompt for AI agents
Address the following comment on docs/providers/cli.md at line 163:

<comment>output_format is referenced in args but not marked required, which can produce invalid calls when omitted; either require it or make the flag conditional.</comment>

<file context>
@@ -0,0 +1,323 @@
+      &quot;input_file&quot;: {&quot;type&quot;: &quot;string&quot;},
+      &quot;output_format&quot;: {&quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;json&quot;, &quot;csv&quot;]}
+    },
+    &quot;required&quot;: [&quot;input_file&quot;]
+  },
+  &quot;tool_call_template&quot;: {
</file context>

{
"call_template_type": "cli",
"command": "python",
"args": ["-c", "import os; print(os.listdir('${path}'))"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interpolating ${path} inside the Python -c code enables code injection if the value contains quotes or escapes; pass the path as an argument instead.

Prompt for AI agents
Address the following comment on docs/providers/cli.md at line 321:

<comment>Interpolating ${path} inside the Python -c code enables code injection if the value contains quotes or escapes; pass the path as an argument instead.</comment>

<file context>
@@ -0,0 +1,323 @@
+{
+  &quot;call_template_type&quot;: &quot;cli&quot;,
+  &quot;command&quot;: &quot;python&quot;,
+  &quot;args&quot;: [&quot;-c&quot;, &quot;import os; print(os.listdir(&#39;${path}&#39;))&quot;]
+}
+```
</file context>

]
)

client = await UtcpClient.create(config=config)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Top-level await in Python example; needs to be inside an async function (or wrapped with asyncio.run).

Prompt for AI agents
Address the following comment on docs/implementation.md at line 347:

<comment>Top-level await in Python example; needs to be inside an async function (or wrapped with asyncio.run).</comment>

<file context>
@@ -0,0 +1,580 @@
+    ]
+)
+
+client = await UtcpClient.create(config=config)
+```
+
</file context>

"http_method": "GET",
"query_params": {
"q": "${location}",
"appid": "${WEATHER_API_KEY}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

API key is included twice (in query_params and via auth injection), which can cause duplication or confusion. Remove one of the two sources to avoid conflicts.

Prompt for AI agents
Address the following comment on docs/implementation.md at line 63:

<comment>API key is included twice (in query_params and via auth injection), which can cause duplication or confusion. Remove one of the two sources to avoid conflicts.</comment>

<file context>
@@ -0,0 +1,580 @@
+                    &quot;http_method&quot;: &quot;GET&quot;,
+                    &quot;query_params&quot;: {
+                        &quot;q&quot;: &quot;${location}&quot;,
+                        &quot;appid&quot;: &quot;${WEATHER_API_KEY}&quot;
+                    }
+                }
</file context>

from utcp_http.openapi_converter import OpenApiConverter

converter = OpenApiConverter()
manual = await converter.convert_openapi_to_manual(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example references an undocumented method convert_openapi_to_manual; API docs list OpenApiConverter.convert() instead, which may mislead users copying the snippet.

(Based on your team's feedback about providing accurate, practical implementation examples.)

Prompt for AI agents
Address the following comment on docs/providers/http.md at line 249:

<comment>Example references an undocumented method convert_openapi_to_manual; API docs list OpenApiConverter.convert() instead, which may mislead users copying the snippet.

(Based on your team&#39;s feedback about providing accurate, practical implementation examples.)</comment>

<file context>
@@ -0,0 +1,258 @@
+from utcp_http.openapi_converter import OpenApiConverter
+
+converter = OpenApiConverter()
+manual = await converter.convert_openapi_to_manual(
+    &quot;https://api.example.com/openapi.json&quot;
+)
</file context>

## Related Protocols

- [Server-Sent Events](./sse.md) - For streaming HTTP responses
- [Streamable HTTP](./streamable-http.md) - For chunked HTTP responses
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link points to a non-existent page (./streamable-http.md), resulting in a broken reference.

(Based on your team's feedback about better navigation and cross-references, ensuring all sidebar links resolve.)

Prompt for AI agents
Address the following comment on docs/providers/http.md at line 257:

<comment>Link points to a non-existent page (./streamable-http.md), resulting in a broken reference.

(Based on your team&#39;s feedback about better navigation and cross-references, ensuring all sidebar links resolve.)</comment>

<file context>
@@ -0,0 +1,258 @@
+## Related Protocols
+
+- [Server-Sent Events](./sse.md) - For streaming HTTP responses
+- [Streamable HTTP](./streamable-http.md) - For chunked HTTP responses
+- [WebSocket](./websocket.md) - For bidirectional real-time communication
</file context>

from utcp.utcp_client import UtcpClient

# New way - async factory method
client = await UtcpClient.create(config={
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

await is used at module top level; wrap in an async function (e.g., async def main()) and run it, or restructure the example to avoid top-level awaits.

Prompt for AI agents
Address the following comment on docs/migration-v0.1-to-v1.0.md at line 79:

<comment>await is used at module top level; wrap in an async function (e.g., async def main()) and run it, or restructure the example to avoid top-level awaits.</comment>

<file context>
@@ -0,0 +1,601 @@
+from utcp.utcp_client import UtcpClient
+
+# New way - async factory method
+client = await UtcpClient.create(config={
+    &quot;manual_call_templates&quot;: [
+        {
</file context>

**Solution**: Update manual structure

```json
// Before
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSON code block contains // comments; either switch the fence to jsonc or remove comments/split into two valid JSON blocks.

Prompt for AI agents
Address the following comment on docs/migration-v0.1-to-v1.0.md at line 518:

<comment>JSON code block contains // comments; either switch the fence to jsonc or remove comments/split into two valid JSON blocks.</comment>

<file context>
@@ -0,0 +1,601 @@
+**Solution**: Update manual structure
+
+```json
+// Before
+{&quot;provider&quot;: {&quot;provider_type&quot;: &quot;http&quot;}}
+
</file context>

# Use migration helper
old_config = load_old_config()
new_config = migrate_config_v0_to_v1(old_config)
client = await UtcpClient.create(config=new_config)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

await is used at module top level; wrap in an async function and run it or otherwise avoid top-level awaits in examples.

Prompt for AI agents
Address the following comment on docs/migration-v0.1-to-v1.0.md at line 412:

<comment>await is used at module top level; wrap in an async function and run it or otherwise avoid top-level awaits in examples.</comment>

<file context>
@@ -0,0 +1,601 @@
+# Use migration helper
+old_config = load_old_config()
+new_config = migrate_config_v0_to_v1(old_config)
+client = await UtcpClient.create(config=new_config)
+```
+
</file context>

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
@h3xxit h3xxit changed the base branch from main to enhance-1.0-docs September 5, 2025 09:18
@h3xxit h3xxit merged commit 533d73b into universal-tool-calling-protocol:enhance-1.0-docs Sep 5, 2025
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants