1xn AI Workflow ComposerBLOCK
vMCP - Virtual Model Context Protocol
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://pypi.org/project/1xn-vmcp/) [](https://1xn.ai/docs/) [](https://1xn.ai)
Lego for AI workflows and agents: An open-source tool for composing, customizing and extending multiple MCP servers into a single logical, virtual MCP server
Built for fine grained context-engineering
- Create vMCP, Add MCP servers and Fine-tune
- Extend with your own prompts, tools and resources
- Connect any client (Claude, ChatGPT, Gemini, Cursor, VScode, custom agents) to the vMCP
- Create multiple logical vMCPs based on your workflow and agent needs
vMCP (virtual Model Context Protocol) is an AI configuration and management platform built on top of the Model Context Protocol. It is both :
- A specification that builds on and extends MCPs: vMCP.json
- A platform to create and deploy vMCP Servers:
Why We Built This
The Model Context Protocol has unlocked incredible possibilities for AI integrations, but users and developers quickly hit limitations:
- Configuration Hell: Managing MCP configs across multiple clients (Claude, ChatGPT, VSCode, Cursor, Gemini) is tedious
- Auth: Each mcp client needs its own auth for all the MCPs
- Lack of Customization: Can't modify or extend existing MCPs for specific workflow needs - "context rot / confusion"
- No Composition: Building complex workflows requires piecing together multiple tools from mult
83c836a6cbe7OBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add 1xn --env VMCP_DUMMY_USER_TOKEN=${VMCP_DUMMY_USER_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"1xn": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"VMCP_DUMMY_USER_TOKEN": "${VMCP_DUMMY_USER_TOKEN}"
}
}
}
}Exposed tools (153)
142 read · 11 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
a | read | First number |
add | write | Add two numbers |
add_numbers | write | Add two numbers together. |
age | read | Person age |
api_info_tool | read | API information tool |
api_request_prompt | read | Prompt using API configuration |
b | read | Second number |
base_greeting | read | Base greeting |
book_table | read | Book a table with date availability check. |
calculate | read | Perform calculations |
calculate_area | read | Calculate circle area |
category | read | Product category |
city | read | City name |
complex_prompt_tool | read | A complex prompt tool |
comprehensive_analysis | read | Comprehensive analysis with all features |
comprehensive_reporter | read | Comprehensive reporting tool |
contact_info_tool | read | Provide contact information |
convert_time | read | Convert time from one timezone to another. |
create_product | write | Create a new product |
create_thumbnail | write | Create a thumbnail from an image |
create_user | write | Create a new user |
dashboard_analysis_prompt | read | Analyze dashboard data |
data | read | Dictionary data |
data_formatter | read | Format data tool |
denominator | read | Denominator |
description | read | Product description |
details | read | Additional details |
divide | read | Divide two numbers |
echo_tool | read | Echo tool |
email | read | User email |
extended_greeting | read | Extended greeting with base |
fetch_health | read | Fetch health status |
fibonacci | read | Calculate Fibonacci number |
first_name | read | First name |
format | read | Output format |
generate_poem | read | Generate a poem using LLM sampling. |
get_config | read | This returns unstructured output - no schema generated |
get_current_time | read | Get current time in specified timezone. |
get_location | read | Get location coordinates for a city using the world cities database. |
get_products_filtered | read | Get filtered products |
get_server_health | read | Get server health status |
get_statistics | read | Get various statistics |
get_test_prompt | read | Prompt for testing get operation |
get_user | read | Get user profile - returns structured data |
get_user_by_id | read | Get user by ID |
get_user_by_id_collection | read | Get user by ID (from collection) |
get_user_profile | read | Get user profile |
get_users | read | Get Users (imported from collection) |
get_users_collection | read | Get users (from collection) |
get_users_with_apikey | read | Get users with API key |
get_users_with_config | read | Get users using config API key |
get_weather | read | Get weather for a city using Open-Meteo API. |
get_weather_array | read | Get weather for multiple cities - returns structured data. Input should |
get_weather_json | read | Get weather for multiple cities from JSON input. Each city can have location and unit settings. |
get_weather_structured | read | Get weather for a city - returns structured data. |
greet_in_language | read | Greet user in specific language |
greet_user | read | Greet user with optional title |
greeting | read | Standard greeting message |
greeting_tool | read | Greeting tool |
health_check | read | Health check endpoint from collection |
hello | read | Say hello to someone. |
http_api_key_tool | read | HTTP tool with API key |
http_basic_auth_tool | read | HTTP tool with basic auth |
http_bearer_tool | read | HTTP tool with bearer token |
http_config_sub_tool | read | HTTP tool with config substitution |
http_get_tool | read | A simple HTTP GET tool |
http_param_sub_tool | read | HTTP tool with param substitution |
http_patch_tool | write | HTTP PATCH tool |
http_post_tool | write | HTTP POST tool with JSON body |
http_query_tool | read | HTTP tool with query params |
id | read | Resource ID |
input | read | Input text |
input_data | read | Input data |
items | read | List of items |
language | read | Language for greeting |
last_name | read | Last name |
limit | read | Result limit |
list_cities | read | Get a list of cities |
location | read | Location |
long_running_task | write | Execute a task with progress updates. |
message | read | Message to process |
multiply | read | Multiply two numbers |
n | read | Position in Fibonacci sequence |
name | read | User |
new_price | read | New price |
notify | write | Send notification |
number | read | Float number |
numbers | read | List of numbers |
numerator | read | Numerator |
operation | read | Operation type |
param1 | read | Parameter 1 |
param2 | read | Parameter 2 |
personalized_greeting | read | Personalized greeting |
personalized_report | read | Generate personalized report |
price | read | Product price |
process_data | read | Process data with logging. |
product_id | read | Product ID |
product_name | read | Product name |
prompt_tool_1 | read | Prompt tool 1 |
prompt_tool_2 | read | Prompt tool 2 |
prompt_tool_with_config | read | A prompt tool with config variables |
prompt_tool_with_mcp | read | A prompt tool that calls MCP tools |
prompt_tool_with_vars | read | A prompt tool with variables |
python_complex_tool | read | Python tool with complex logic |
python_default_tool | read | Python tool with default values |
python_dict_tool | read | Python tool with dict parameter |
python_float_tool | read | Python tool with float parameter |
python_list_tool | read | Python tool with list parameter |
python_string_tool | read | Python tool with string parameter |
query | read | Search query |
query_db | read | Tool that uses initialized resources. |
radius | read | Circle radius |
report_type | read | Type of report |
role | read | User |
roll_dice | read | Roll dice with specified number of dice and sides. |
search | read | Search for information |
signature | read | Email signature |
simple_analyzer | read | A simple analysis tool |
simple_greeting | read | A simple greeting prompt |
simple_prompt_tool | read | A simple prompt tool |
simple_python_tool | read | A simple Python tool |
string_formatter | read | Format strings |
sum_list | read | Sum a list of numbers |
sum_of_array | read | Sum of array |
summary | read | Summary text |
system_info_prompt | read | System info prompt |
test_audio_content | read | Tests audio content response |
test_elicitation | read | Tests server-initiated elicitation (user input request) |
test_elicitation_sep1034_defaults | read | Tests elicitation with default values for all primitive types (SEP-1034) |
test_embedded_resource | read | Tests embedded resource content response |
test_error_handling | read | Tests error response handling |
test_get_env | read | Tests env setting for stdio servers |
test_get_headers | read | Tests headers setting for sse/http servers |
test_image_content | read | Tests image content response |
test_multiple_content_types | read | Tests response with multiple content types (text, image, resource) |
test_prompt | read | A test prompt |
test_sampling | read | Tests server-initiated sampling (LLM completion request) |
test_simple_text | read | Tests simple text content response |
test_tool | read | A test tool |
test_tool_with_logging | read | Tests tool that emits log messages during execution |
test_tool_with_progress | read | Tests tool that reports progress notifications |
test_tools_change_notification | read | Tests tool that emits log messages during execution |
text | read | Text input |
title | read | User |
update_product_price | write | Update product price |
updates | write | Update data |
user_id | read | User ID |
user_name | read | User |
username | read | User name |
weather_analysis_prompt | read | Analyze weather data |
weather_reporter | read | Report weather tool |
x | read | First number |
y | read | Second number |
Trust audit
BLOCKgrade F · trust 60/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (11 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
componentFunction = new Function(...contextKeys, functionBody);
cursor.avif
print(f"VMCP_DATABASE_URL=postgresql://{user}:{password}@localhost:{port}/{database}")logger.debug(f"🔍 MCP AUTH: Token length: {len(token)}")logger.debug(f"[VMCPServer] DEBUG: Extracted token: '{token[:20] if token else 'EMPTY'}...')")callback_url: Optional[str] = None, headers: Optional[Dict[str, str]] = None, **kwargs) -> Dict[str, str]:
if callback_url is None:
callback_url = f"{settings.base_url}/api/otherservers/oauth/callback"discovery_response = await self._discover_oauth_endpoints(server_url, callback_url)
registered_client_id = await self._register_oauth_client(registration_endpoint, callback_url)
baseUrl: 'http://0.0.0.0:8000'
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAACvdJREFUeJztXQuQVMUVHT5GCYmSDwaVMhQWmpSRRIEkJqmdFVQCRuRjCiVq8MMGKKTYGESEREAFhI
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAACvdJREFUeJztXQuQVMUVHT5GCYmSDwaVMhQWmpSRRIEkJqmdFVQCRuRjCiVq8MMGKKTYGESEREAFhI
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAACvdJREFUeJztXQuQVMUVHT5GCYmSDwaVMhQWmpSRRIEkJqmdFVQCRuRjCiVq8MMGKKTYGESEREAFhI
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAACvdJREFUeJztXQuQVMUVHT5GCYmSDwaVMhQWmpSRRIEkJqmdFVQCRuRjCiVq8MMGKKTYGESEREAFhI
"src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAACvdJREFUeJztXQuQVMUVHT5GCYmSDwaVMhQWmpSRRIEkJqmdFVQCRuRjCiVq8MMGKKTYGESEREAFhI
.coveragerc
file_hash = hashlib.md5(file).hexdigest()
print(f"✅ Test token verified: {token[:20]}...")console.log(`\n📦 Test 6.4 - HTTP tool with Bearer token: ${createdVMCP.id}`)import { useTheme } from '../../contexts/theme-context';# Generate the API client (backend must be running at http://0.0.0.0:8080)
npx openapi-ts -i http://0.0.0.0:8080/openapi.json -o ./src/api/generated
Make sure your backend is running at `http://0.0.0.0:8080` (or update the URL in package.json script)
1. Fetch the OpenAPI spec from `http://0.0.0.0:8080/openapi.json`
Gates applied: no_behavioural_pass.
83c836a6cbe7full audit observations/trust-audit/mcp-server/1xn-labs__1xn-ai-workflow-composer.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 83c836a6cbe7 | BLOCK | F | 60 | first audit |
Questions
What is the 1xn AI Workflow Composer MCP server?
vMCP - Virtual Model Context Protocol
What tools does 1xn AI Workflow Composer expose?
153 in total: 142 read-only, 11 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is 1xn AI Workflow Composer safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (60/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.
What credentials does 1xn AI Workflow Composer need?
It reads VMCP_DUMMY_USER_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does 1xn AI Workflow Composer run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as 1xn at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (83c836a6cbe7), read on 2026-10-08. The repository is watched and re-audited when it changes.