
Byted Redis
- 15 installs
- 411 repo stars
- Updated August 4, 2026
- bytedance/agentkit-samples
byted-redis is a skill that launches the Volcengine Redis MCP Server and exposes tools to manage Volcengine Redis instances, accounts, backups, and parameters.
About
byted-redis launches and interacts with the Volcengine Redis MCP Server so an agent can manage Volcengine Redis resources through the Model Context Protocol. It exposes 40 tools to list and create instances, inspect slow logs, hot keys, and big keys, and manage accounts, IP allowlists, backups, and parameter groups. A developer uses it to run Redis operational tasks on Volcengine via natural language or the bundled Python client.
- Launches and drives the Volcengine Redis MCP Server over the MCP protocol
- Exposes 40 tools to manage instances, accounts, backups, allowlists, and parameters
- Supports static AK/SK, temporary credentials, and STS Bearer authorization
Byted Redis by the numbers
- 15 all-time installs (skills.sh)
- Ranked #593 of 911 Databases skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
byted-redis capabilities & compatibility
Requires Volcengine AK/SK or STS credentials and a region; the Redis resources managed are billed by Volcengine.
- Capabilities
- redis management · database operations · mcp server
- Works with
- redis
- Use cases
- database · devops
- Runs
- Runs locally
- Pricing
- Bring your own API key
What byted-redis says it does
A skill to launch and interact with the Volcengine Redis MCP Server. This skill enables agents to manage Redis instances, databases, accounts, backups, and configurations using the MCP protocol.
- Python 3.10+ - `uv` package manager (installed) - Volcengine account with proper permissions for Redis and VPC services.
npx skills add https://github.com/bytedance/agentkit-samples --skill byted-redisAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 15 |
|---|---|
| repo stars | ★ 411 |
| Last updated | August 4, 2026 |
| Repository | bytedance/agentkit-samples ↗ |
What it does
Manage Volcengine Redis instances, accounts, backups, and parameters through the Redis MCP Server.
Who is it for?
Managing Volcengine Redis resources programmatically or by natural language through MCP.
Skip if: Non-Volcengine Redis deployments, since it targets the Volcengine Redis MCP Server.
When should I use this skill?
The user needs to list, create, or operate Volcengine Redis instances, accounts, allowlists, backups, or parameters.
What you get
Provides a Redis MCP server and client that manage Volcengine Redis instances and their configuration.
- A running Volcengine Redis MCP Server
- Managed Redis instances, accounts, backups, and parameters
By the numbers
- Exposes 40 MCP tools
- Requires Python 3.10+
Files
Volcengine Redis MCP Server Skill
🔵 Overview
This skill provides a complete set of tools to interact with Volcengine Redis using the Model Context Protocol (MCP). It allows users to query instances, manage parameters, and perform operational tasks on Volcengine Redis through natural language or programmatic invocation. ---
Supported Tools
The MCP Server exposes the following capabilities: 1. describe_regions - Query available regional resources. 2. describe_zones - Query available zone resources. 3. describe_vpcs - Query VPCs. 4. describe_subnets - Query subnets. 5. describe_db_instances - List Redis instances. 6. describe_db_instance_detail - View details for a specific instance. 7. describe_db_instance_specs - List supported instance specs. 8. describe_slow_logs - Query slow logs. 9. describe_hot_keys - Query hot keys. 10. describe_big_keys - Query big keys. 11. describe_backups - Query backup list. 12. describe_db_instance_params - List instance parameters. 13. describe_parameter_groups - Query parameter templates. 14. describe_parameter_group_detail - View parameter template details. 15. describe_allow_lists - Query IP whitelists. 16. describe_allow_list_detail - View whitelist details. 17. list_db_account - Query database accounts. 18. create_db_instance - Create a Redis instance. 19. modify_db_instance_params - Modify parameter configurations. 20. create_db_account - Create an account for a Redis instance. 21. create_allow_list - Create a new IP whitelist. 22. associate_allow_list - Bind a whitelist to an instance. 23. disassociate_allow_list - Unbind a whitelist from an instance. 24. describe_db_instance_shards - Query shard information. 25. describe_node_ids - Query node IDs. 26. modify_db_instance_name - Modify an instance's name. 27. describe_tags_by_resource - Query tags. 28. describe_backup_plan - Query backup plan. 29. describe_pitr_time_window - Query PITR time window. 30. describe_backup_point_download_urls - Get backup point download URLs. 31. describe_cross_region_backup_policy - Query cross-region backup policy. 32. describe_cross_region_backups - Query cross-region backups. 33. create_parameter_group - Create a parameter group. 34. create_db_endpoint_public_address - Create a public endpoint. 35. describe_db_instance_bandwidth_per_shard - Query shard bandwidth. 36. describe_db_instance_acl_commands - Query supported ACL commands. 37. describe_db_instance_acl_categories - Query supported ACL categories. 38. describe_planned_events - Query planned events. 39. describe_key_scan_jobs - Query key scan jobs. 40. describe_eip_addresses - Query EIP addresses.
🔧 Prerequisites
- Python 3.10+
uvpackage manager (installed)- Volcengine account with proper permissions for Redis and VPC services.
🔐 Environment Variables
Before running the skill, prepare one of the following credential modes.
Option A: Static AK/SK or temporary credentials in environment variables
Prepare these environment variables before running the skill:
VOLCENGINE_ACCESS_KEYVOLCENGINE_SECRET_KEYVOLCENGINE_REGION(for examplecn-beijing)
If you are using temporary credentials, also prepare:
VOLCENGINE_SESSION_TOKEN
Option B: STS credentials via Authorization / authorization
Redis MCP also supports a Bearer token whose body is a Base64-encoded JSON payload in the Authorization header.
Authorization: Bearer BASE64_JSON_PAYLOADThe decoded JSON payload should contain these fields:
AccessKeyIdSecretAccessKeySessionTokenCurrentTimeExpiredTimeRegion
Notes:
SessionTokenis required when using STS credentials.- If
CurrentTimeandExpiredTimeare present, the server validates whether the STS token is expired. - For stdio-based skill scripts, you may expose this value through
AUTHORIZATIONorauthorization. - Authorization credentials take precedence over environment AK/SK when both are provided.
🚀 Usage
1. Test & Client Example
Use the provided script to verify the server and view usage examples for the stdio flow:
uv run scripts/call_redis_mcp_example.py2. Service Management (Optional)
To run the server as a daemon:
./scripts/start_volcengine_redis_mcp.sh
./scripts/status_volcengine_redis_mcp.sh
./scripts/stop_volcengine_redis_mcp.sh💻 Programmatic Usage via MCP Client
You can use the provided Python scripts to programmatically call the MCP Server. The bundled client supports:
VOLCENGINE_ACCESS_KEY+VOLCENGINE_SECRET_KEY- optional
VOLCENGINE_SESSION_TOKEN AUTHORIZATION/authorizationfor STS Bearer payloads
Example:
import asyncio
import sys
# Ensure imports work from the scripts directory
sys.path.append("scripts")
from mcp_client import RedisMCPClient
async def main():
async with RedisMCPClient() as client:
# List tools
tools = await client.list_tools()
print("Available tools:", [t['name'] for t in tools])
# Call a tool
result = await client.call_tool("describe_db_instances", {})
print(result)
asyncio.run(main())# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.Volcengine Redis MCP Skill
This directory contains the Skill implementation for the Volcengine Redis MCP Server. It provides a standard interface for intelligent agents (such as Claude Code) to interact with Volcengine Redis via MCP.
Structure
- SKILL.md: The manifest file for the skill. Agents parse this file to understand the skill capabilities and usage instructions.
- scripts/mcp_client.py: A Python module acting as an MCP client for Volcengine Redis.
- scripts/call_redis_mcp_example.py: A unified testing and example script. It lists tools and demonstrates how to invoke both parameterless tools (e.g.,
describe_regions) and parameterized tools (e.g.,describe_db_instances). - scripts/start_volcengine_redis_mcp.sh: Starts the MCP server as a background process.
- scripts/stop_volcengine_redis_mcp.sh: Stops the background MCP server.
- scripts/status_volcengine_redis_mcp.sh: Checks the status of the background MCP server.
Installation & Setup
1. Ensure uv is installed on your system. 2. Prepare one of the following Volcengine credential modes.
Option A: Static AK/SK or temporary credentials via environment variables (stdio)
Prepare these environment variables in your terminal or secret manager before starting the skill:
VOLCENGINE_ACCESS_KEYVOLCENGINE_SECRET_KEYVOLCENGINE_REGION(for examplecn-beijing)
If you are using temporary credentials, also prepare:
VOLCENGINE_SESSION_TOKEN
Option B: STS credentials via Authorization / authorization (stdio or HTTP clients)
You can also pass a Bearer token whose body is a Base64-encoded JSON payload through the Authorization header.
The decoded JSON should contain these fields:
AccessKeyIdSecretAccessKeySessionTokenCurrentTimeExpiredTimeRegion
Notes:
SessionTokenis required when using STS.- If both
CurrentTimeandExpiredTimeare present, the server validates whether the STS token is expired. - For the provided stdio skill scripts, you may export the token through
AUTHORIZATIONorauthorization. - If both header/authorization credentials and environment AK/SK are provided, authorization credentials take precedence.
Client Support
This skill is compatible with multiple agent clients:
- Claude Code: It will read the
SKILL.mdfile and directly execute the python scripts usinguv run. - Agentkit: Can be loaded as a custom MCP skill via standard MCP SDKs.
Quick Test
cd skills
uv run scripts/call_redis_mcp_example.py# Volcengine Redis MCP Skill Dependencies
## Python Dependencies
mcp>=1.1.0
volcengine-python-sdk>=4.0.24# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env python3
# /// script
# dependencies = [
# "mcp>=1.0.0",
# ]
# ///
import asyncio
import json
import os
import sys
from mcp_client import RedisMCPClient
def detect_credential_mode():
if os.getenv("AUTHORIZATION") or os.getenv("authorization"):
return "Authorization STS"
if os.getenv("VOLCENGINE_SESSION_TOKEN"):
return "AK/SK + SessionToken"
return "AK/SK"
def pretty_print_json(raw_text: str) -> str:
try:
return json.dumps(json.loads(raw_text), indent=2, ensure_ascii=False)
except Exception:
return raw_text
async def test_server():
region = os.getenv("VOLCENGINE_REGION") or "cn-beijing"
print("Testing Volcengine Redis MCP Server...")
print(f"Resolved region for requests: {region}")
print(f"Detected credential mode: {detect_credential_mode()}")
try:
async with RedisMCPClient() as client:
print("\n1. Successfully connected to MCP server.")
# --- 1. List available tools ---
tools = await client.list_tools()
print(f"\n2. Retrieved {len(tools)} tools:")
for i, tool in enumerate(tools[:5]): # show first 5
print(f" - {tool['name']}: {tool['description'][:60]}...")
if len(tools) > 5:
print(f" ... and {len(tools) - 5} more tools.")
# --- 2. Test a parameterless read-only tool ---
print("\n3. Testing tool invocation: describe_regions")
regions_result = await client.call_tool("describe_regions", {})
print(" Result:")
print(f"{pretty_print_json(regions_result)}\n")
# --- 3. Test an advanced tool with arguments ---
print("4. Testing tool invocation: describe_db_instances (with args)")
# Requesting only 1 instance to keep the output concise
instances_result = await client.call_tool(
"describe_db_instances", {"region_id": region, "page_size": 1}
)
print(" Result:")
data = json.loads(instances_result)
if "instances" in data and len(data["instances"]) > 0:
data["instances"] = data["instances"][:1]
data["_note"] = (
"Output truncated to 1 instance by test script for brevity"
)
print(f"{json.dumps(data, indent=2, ensure_ascii=False)}\n")
print("\nAll tests passed successfully!")
except Exception as e:
print(f"\nTest failed: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
asyncio.run(test_server())
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/usr/bin/env python3
# /// script
# dependencies = [
# "mcp>=1.0.0",
# ]
# ///
import os
import sys
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
AUTH_ENV_NAMES = (
"VOLCENGINE_ACCESS_KEY",
"VOLCENGINE_SECRET_KEY",
"VOLCENGINE_SESSION_TOKEN",
"VOLCENGINE_REGION",
"VOLCENGINE_ENDPOINT",
"AUTHORIZATION",
"authorization",
)
RUNTIME_ENV_NAMES = (
"PATH",
"HOME",
"USER",
"TMPDIR",
"LANG",
"LC_ALL",
"LC_CTYPE",
"SHELL",
"SSL_CERT_FILE",
"REQUESTS_CA_BUNDLE",
"CURL_CA_BUNDLE",
"HTTP_PROXY",
"HTTPS_PROXY",
"ALL_PROXY",
"NO_PROXY",
"http_proxy",
"https_proxy",
"all_proxy",
"no_proxy",
"UV_CACHE_DIR",
"UV_INDEX_URL",
"UV_EXTRA_INDEX_URL",
"UV_PYTHON",
)
class RedisMCPClient:
def __init__(self, env: dict[str, str] | None = None):
self.session = None
self._exit_stack = None
self._env = env
def _credential_env(self) -> dict[str, str]:
return self._env if self._env is not None else os.environ
def _build_server_env(self) -> dict[str, str]:
server_env = {}
for name in RUNTIME_ENV_NAMES:
value = os.environ.get(name)
if value:
server_env[name] = value
for name in AUTH_ENV_NAMES:
value = self._credential_env().get(name)
if value:
server_env[name] = value
return server_env
async def connect(self):
credential_env = self._credential_env()
# Check credentials. The stdio skill client supports either:
# 1) AK/SK (optionally with VOLCENGINE_SESSION_TOKEN)
# 2) AUTHORIZATION / authorization with a Bearer token payload
has_aksk = bool(
credential_env.get("VOLCENGINE_ACCESS_KEY")
and credential_env.get("VOLCENGINE_SECRET_KEY")
)
has_authorization = bool(
credential_env.get("AUTHORIZATION") or credential_env.get("authorization")
)
if not has_aksk and not has_authorization:
print(
"Error: Missing Redis MCP credentials. Provide either VOLCENGINE_ACCESS_KEY + VOLCENGINE_SECRET_KEY "
"(optionally with VOLCENGINE_SESSION_TOKEN) or AUTHORIZATION/authorization.",
file=sys.stderr,
)
print(
"Example 1: define VOLCENGINE_ACCESS_KEY and VOLCENGINE_SECRET_KEY in the environment.",
file=sys.stderr,
)
print(
"Example 2: define AUTHORIZATION in the environment with a Bearer token.",
file=sys.stderr,
)
sys.exit(1)
# To support standalone skill distribution without requiring local codebase,
# we default to using `uvx` to fetch and run the server from the remote repo.
server_params = StdioServerParameters(
command="uvx",
args=[
"--from",
"git+https://github.com/volcengine/mcp-server.git#subdirectory=server/mcp_server_redis",
"mcp-server-redis",
"-t",
"stdio",
],
env=self._build_server_env(),
)
from contextlib import AsyncExitStack
self._exit_stack = AsyncExitStack()
# Start the client
try:
read, write = await self._exit_stack.enter_async_context(
stdio_client(server_params)
)
self.session = await self._exit_stack.enter_async_context(
ClientSession(read, write)
)
await self.session.initialize()
except Exception as e:
print(f"Failed to connect to MCP server: {e}", file=sys.stderr)
sys.exit(1)
async def list_tools(self):
"""List all available tools."""
if not self.session:
raise RuntimeError("Client not connected")
result = await self.session.list_tools()
tools = []
for t in result.tools:
tools.append({"name": t.name, "description": t.description or ""})
return tools
async def call_tool(self, name: str, arguments: dict = None):
"""Call a specific tool."""
if not self.session:
raise RuntimeError("Client not connected")
arguments = arguments or {}
result = await self.session.call_tool(name, arguments)
# Parse text content from response
output = ""
for content in result.content:
if content.type == "text":
output += content.text + "\n"
return output
async def close(self):
if self._exit_stack:
await self._exit_stack.aclose()
self.session = None
async def __aenter__(self):
await self.connect()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
await self.close()
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/bin/bash
# Start Volcengine Redis MCP service as a background process
LOG_DIR="logs"
mkdir -p "$LOG_DIR"
if [ -f "volcengine_redis_mcp.pid" ]; then
echo "Volcengine Redis MCP server is already running with PID $(cat volcengine_redis_mcp.pid)."
exit 1
fi
LOG_FILE="${LOG_DIR}/volcengine_redis_mcp_$(date +%Y%m%d_%H%M%S).log"
# Use uvx to fetch and run the server from the remote Github repository
# This makes the skill script completely standalone
echo "Starting Volcengine Redis MCP Server..."
nohup uvx --from git+https://github.com/volcengine/mcp-server.git#subdirectory=server/mcp_server_redis mcp-server-redis -t stdio > "$LOG_FILE" 2>&1 &PID=$!
echo $PID > volcengine_redis_mcp.pid
echo "Volcengine Redis MCP Server started with PID $PID."
echo "Logs are being written to $LOG_FILE"
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/bin/bash
# Check the status of the Volcengine Redis MCP service
if [ ! -f "volcengine_redis_mcp.pid" ]; then
echo "Status: STOPPED (volcengine_redis_mcp.pid not found)"
exit 0
fi
PID=$(cat volcengine_redis_mcp.pid)
if kill -0 $PID > /dev/null 2>&1; then
echo "Status: RUNNING (PID: $PID)"
echo "Recent logs:"
ls -t logs/volcengine_redis_mcp_*.log | head -1 | xargs tail -n 10
else
echo "Status: STOPPED (PID file exists but process $PID is not running)"
rm volcengine_redis_mcp.pid
fi
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/bin/bash
# Stop the background Volcengine Redis MCP service
if [ ! -f "volcengine_redis_mcp.pid" ]; then
echo "No volcengine_redis_mcp.pid found. Server is likely not running."
exit 0
fi
PID=$(cat volcengine_redis_mcp.pid)
if kill -0 $PID > /dev/null 2>&1; then
echo "Stopping Volcengine Redis MCP server with PID $PID..."
kill $PID
sleep 2
if kill -0 $PID > /dev/null 2>&1; then
echo "Force killing Volcengine Redis MCP server..."
kill -9 $PID
fi
echo "Volcengine Redis MCP server stopped."
else
echo "Volcengine Redis MCP server process $PID not found. Cleaning up pid file."
fi
rm volcengine_redis_mcp.pid
Related skills
FAQ
How many tools does the Redis MCP Server expose?
It exposes 40 tools covering instances, zones, backups, accounts, allowlists, parameters, and more.
What credentials does byted-redis need?
Volcengine AK/SK (or temporary/STS credentials via an Authorization Bearer payload) plus a region.