World Monitor
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
作者による説明(英語の原文)
MCP Server for vmanomaly - VictoriaMetrics anomaly detection
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
チェック 2/2 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
MCP Vmanomaly のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
SettingsDeveloperEdit Config
{
"mcpServers": {
"vmanomaly": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VMANOMALY_ENDPOINT",
"-e",
"VMANOMALY_BEARER_TOKEN",
"-e",
"VMANOMALY_BEARER_TOKEN_FILE",
"-e",
"VMANOMALY_HEADERS",
"-e",
"MCP_SERVER_MODE",
"-e",
"MCP_LISTEN_ADDR",
"-e",
"MCP_LOG_LEVEL",
"-e",
"MCP_LOG_FILE",
"-e",
"MCP_ENABLED_TOOLS",
"-e",
"MCP_DISABLED_TOOLS",
"-e",
"MCP_HEARTBEAT_INTERVAL",
"-e",
"MCP_DISABLE_RESOURCES",
"ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0"
],
"env": {
"VMANOMALY_ENDPOINT": "your-value",
"VMANOMALY_BEARER_TOKEN": "your-value",
"VMANOMALY_BEARER_TOKEN_FILE": "your-value",
"VMANOMALY_HEADERS": "your-value",
"MCP_SERVER_MODE": "your-value",
"MCP_LISTEN_ADDR": "your-value",
"MCP_LOG_LEVEL": "your-value",
"MCP_LOG_FILE": "your-value",
"MCP_ENABLED_TOOLS": "your-value",
"MCP_DISABLED_TOOLS": "your-value",
"MCP_HEARTBEAT_INTERVAL": "your-value",
"MCP_DISABLE_RESOURCES": "your-value"
}
}
}
}キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
MCP Vmanomaly を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が MCP Vmanomaly を使っていると言うか、回答に MCP Vmanomaly のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ MCP Vmanomaly につなげません
MCP Vmanomaly はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
A · MCP Vmanomaly につなげるアプリを使う
B · その他 の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
Claude Code につなげますが、先に準備が必要です
MCP Vmanomaly のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
キーの取り方は下の提供元 README にあります
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
claude mcp add vmanomaly --env VMANOMALY_ENDPOINT=your-value --env VMANOMALY_BEARER_TOKEN=your-value --env VMANOMALY_BEARER_TOKEN_FILE=your-value --env VMANOMALY_HEADERS=your-value --env MCP_SERVER_MODE=your-value --env MCP_LISTEN_ADDR=your-value --env MCP_LOG_LEVEL=your-value --env MCP_LOG_FILE=your-value --env MCP_ENABLED_TOOLS=your-value --env MCP_DISABLED_TOOLS=your-value --env MCP_HEARTBEAT_INTERVAL=your-value --env MCP_DISABLE_RESOURCES=your-value -- docker run -i --rm -e VMANOMALY_ENDPOINT -e VMANOMALY_BEARER_TOKEN -e VMANOMALY_BEARER_TOKEN_FILE -e VMANOMALY_HEADERS -e MCP_SERVER_MODE -e MCP_LISTEN_ADDR -e MCP_LOG_LEVEL -e MCP_LOG_FILE -e MCP_ENABLED_TOOLS -e MCP_DISABLED_TOOLS -e MCP_HEARTBEAT_INTERVAL -e MCP_DISABLE_RESOURCES ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0Enter の前に「your-value」を自分のキーに書き換えてください
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
MCP Vmanomaly が一覧にあり、接続済みと表示されれば OK です
MCP Vmanomaly を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が MCP Vmanomaly を使っていると言うか、回答に MCP Vmanomaly のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
MCP Vmanomaly のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
キーの取り方は下の提供元 README にあります
MCP Vmanomaly の設定で VMANOMALY_ENDPOINT, VMANOMALY_BEARER_TOKEN, VMANOMALY_BEARER_TOKEN_FILE, VMANOMALY_HEADERS, MCP_SERVER_MODE, MCP_LISTEN_ADDR, MCP_LOG_LEVEL, MCP_LOG_FILE, MCP_ENABLED_TOOLS, MCP_DISABLED_TOOLS, MCP_HEARTBEAT_INTERVAL, MCP_DISABLE_RESOURCES が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
MCP Vmanomaly を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が MCP Vmanomaly を使っていると言うか、回答に MCP Vmanomaly のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
MCP Vmanomaly のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
キーの取り方は下の提供元 README にあります
MCP Vmanomaly の設定で VMANOMALY_ENDPOINT, VMANOMALY_BEARER_TOKEN, VMANOMALY_BEARER_TOKEN_FILE, VMANOMALY_HEADERS, MCP_SERVER_MODE, MCP_LISTEN_ADDR, MCP_LOG_LEVEL, MCP_LOG_FILE, MCP_ENABLED_TOOLS, MCP_DISABLED_TOOLS, MCP_HEARTBEAT_INTERVAL, MCP_DISABLE_RESOURCES が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
MCP Vmanomaly を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が MCP Vmanomaly を使っていると言うか、回答に MCP Vmanomaly のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください
JSON 設定は下の「開発者向け」にあります
Claude Code
claude mcp add vmanomaly --env VMANOMALY_ENDPOINT=your-value --env VMANOMALY_BEARER_TOKEN=your-value --env VMANOMALY_BEARER_TOKEN_FILE=your-value --env VMANOMALY_HEADERS=your-value --env MCP_SERVER_MODE=your-value --env MCP_LISTEN_ADDR=your-value --env MCP_LOG_LEVEL=your-value --env MCP_LOG_FILE=your-value --env MCP_ENABLED_TOOLS=your-value --env MCP_DISABLED_TOOLS=your-value --env MCP_HEARTBEAT_INTERVAL=your-value --env MCP_DISABLE_RESOURCES=your-value -- docker run -i --rm -e VMANOMALY_ENDPOINT -e VMANOMALY_BEARER_TOKEN -e VMANOMALY_BEARER_TOKEN_FILE -e VMANOMALY_HEADERS -e MCP_SERVER_MODE -e MCP_LISTEN_ADDR -e MCP_LOG_LEVEL -e MCP_LOG_FILE -e MCP_ENABLED_TOOLS -e MCP_DISABLED_TOOLS -e MCP_HEARTBEAT_INTERVAL -e MCP_DISABLE_RESOURCES ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"vmanomaly": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VMANOMALY_ENDPOINT",
"-e",
"VMANOMALY_BEARER_TOKEN",
"-e",
"VMANOMALY_BEARER_TOKEN_FILE",
"-e",
"VMANOMALY_HEADERS",
"-e",
"MCP_SERVER_MODE",
"-e",
"MCP_LISTEN_ADDR",
"-e",
"MCP_LOG_LEVEL",
"-e",
"MCP_LOG_FILE",
"-e",
"MCP_ENABLED_TOOLS",
"-e",
"MCP_DISABLED_TOOLS",
"-e",
"MCP_HEARTBEAT_INTERVAL",
"-e",
"MCP_DISABLE_RESOURCES",
"ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0"
],
"env": {
"VMANOMALY_ENDPOINT": "your-value",
"VMANOMALY_BEARER_TOKEN": "your-value",
"VMANOMALY_BEARER_TOKEN_FILE": "your-value",
"VMANOMALY_HEADERS": "your-value",
"MCP_SERVER_MODE": "your-value",
"MCP_LISTEN_ADDR": "your-value",
"MCP_LOG_LEVEL": "your-value",
"MCP_LOG_FILE": "your-value",
"MCP_ENABLED_TOOLS": "your-value",
"MCP_DISABLED_TOOLS": "your-value",
"MCP_HEARTBEAT_INTERVAL": "your-value",
"MCP_DISABLE_RESOURCES": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"vmanomaly": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VMANOMALY_ENDPOINT",
"-e",
"VMANOMALY_BEARER_TOKEN",
"-e",
"VMANOMALY_BEARER_TOKEN_FILE",
"-e",
"VMANOMALY_HEADERS",
"-e",
"MCP_SERVER_MODE",
"-e",
"MCP_LISTEN_ADDR",
"-e",
"MCP_LOG_LEVEL",
"-e",
"MCP_LOG_FILE",
"-e",
"MCP_ENABLED_TOOLS",
"-e",
"MCP_DISABLED_TOOLS",
"-e",
"MCP_HEARTBEAT_INTERVAL",
"-e",
"MCP_DISABLE_RESOURCES",
"ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0"
],
"env": {
"VMANOMALY_ENDPOINT": "your-value",
"VMANOMALY_BEARER_TOKEN": "your-value",
"VMANOMALY_BEARER_TOKEN_FILE": "your-value",
"VMANOMALY_HEADERS": "your-value",
"MCP_SERVER_MODE": "your-value",
"MCP_LISTEN_ADDR": "your-value",
"MCP_LOG_LEVEL": "your-value",
"MCP_LOG_FILE": "your-value",
"MCP_ENABLED_TOOLS": "your-value",
"MCP_DISABLED_TOOLS": "your-value",
"MCP_HEARTBEAT_INTERVAL": "your-value",
"MCP_DISABLE_RESOURCES": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"vmanomaly": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VMANOMALY_ENDPOINT",
"-e",
"VMANOMALY_BEARER_TOKEN",
"-e",
"VMANOMALY_BEARER_TOKEN_FILE",
"-e",
"VMANOMALY_HEADERS",
"-e",
"MCP_SERVER_MODE",
"-e",
"MCP_LISTEN_ADDR",
"-e",
"MCP_LOG_LEVEL",
"-e",
"MCP_LOG_FILE",
"-e",
"MCP_ENABLED_TOOLS",
"-e",
"MCP_DISABLED_TOOLS",
"-e",
"MCP_HEARTBEAT_INTERVAL",
"-e",
"MCP_DISABLE_RESOURCES",
"ghcr.io/victoriametrics/mcp-vmanomaly:0.6.0"
],
"env": {
"VMANOMALY_ENDPOINT": "your-value",
"VMANOMALY_BEARER_TOKEN": "your-value",
"VMANOMALY_BEARER_TOKEN_FILE": "your-value",
"VMANOMALY_HEADERS": "your-value",
"MCP_SERVER_MODE": "your-value",
"MCP_LISTEN_ADDR": "your-value",
"MCP_LOG_LEVEL": "your-value",
"MCP_LOG_FILE": "your-value",
"MCP_ENABLED_TOOLS": "your-value",
"MCP_DISABLED_TOOLS": "your-value",
"MCP_HEARTBEAT_INTERVAL": "your-value",
"MCP_DISABLE_RESOURCES": "your-value"
}
}
}
}VMANOMALY_ENDPOINT 必須 envVMANOMALY_BEARER_TOKEN 秘密 envVMANOMALY_BEARER_TOKEN_FILE envVMANOMALY_HEADERS envMCP_SERVER_MODE envMCP_LISTEN_ADDR envMCP_LOG_LEVEL envMCP_LOG_FILE envMCP_ENABLED_TOOLS envMCP_DISABLED_TOOLS envMCP_HEARTBEAT_INTERVAL envMCP_DISABLE_RESOURCES envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月11日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント VictoriaMetrics で確認済みです
コードの最終更新:6 日前
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
まだレビューはありません
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック2項目のうち2項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:VMANOMALY_ENDPOINT, VMANOMALY_BEARER_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は6 日前、最新バージョン(0.6.0)がレジストリに届いたのは6 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。
同じカテゴリには:World Monitor, Claude Flow, Tldraw
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
The implementation of Model Context Protocol (MCP) server for vmanomaly - VictoriaMetrics Anomaly Detection product.
This provides seamless integration with vmanomaly REST API and documentation for AI-assisted anomaly detection, model management, and observability insights.
This MCP server enables AI assistants like Claude to interact with vmanomaly for:
vmanomaly server health and build informationvmanomaly YAML configurationsvmalert alerting rules based on anomaly score metrics to simplify alerting setupvmanomaly documentation with fuzzy matchingThe MCP server contains embedded up-to-date vmanomaly documentation and is able to search it without online access.
The quality of the MCP Server and its responses depends very much on the capabilities of your client and the quality of the model you are using.
vmanomaly instance with REST API access:go install github.com/VictoriaMetrics/mcp-vmanomaly/cmd/mcp-vmanomaly@vX.Y.Z
Replace vX.Y.Z with the exact release you have reviewed.
Download the latest release from Releases page and put it to your PATH.
Example for Linux x86_64 (other architectures and platforms are also available). Select an explicit release rather than a mutable latest URL, verify its checksum, and then verify its GitHub build-provenance attestation:
version=vX.Y.Z
archive=mcp-vmanomaly_Linux_x86_64.tar.gz curl -fLO "https://github.com/VictoriaMetrics/mcp-vmanomaly/releases/download/${version}/${archive}" curl -fLO "https://github.com/VictoriaMetrics/mcp-vmanomaly/releases/download/${version}/checksums.txt" grep " ${archive}$" checksums.txt | sha256sum --check - gh attestation verify "${archive}" --repo VictoriaMetrics/mcp-vmanomaly tar axvf "${archive}" ./mcp-vmanomaly --version
Build-provenance attestations are available for releases produced by the hardened release workflow. Release tags must be annotated, cryptographically signed, and marked as verified by GitHub before that workflow publishes artifacts.
You can run vmanomaly MCP Server using Docker.
This is the easiest way to get started without needing to install Go or build from source.
docker run -d --name mcp-vmanomaly \
--add-host=host.docker.internal:host-gateway \ -e VMANOMALY_ENDPOINT=http://host.docker.internal:8490 \ -e MCP_SERVER_MODE=http \ -e MCP_LISTEN_ADDR=:8080 \ -p 127.0.0.1:8080:8080 \ ghcr.io/victoriametrics/mcp-vmanomaly:vX.Y.Z
Replace vX.Y.Z and the environment variables with your own parameters. When both services run in Docker, prefer a private Docker network and use the vmanomaly service name as the endpoint.
Note that the MCP_SERVER_MODE=http flag is used to enable Streamable HTTP mode. More details about server modes can be found in the Configuration section.
See available docker images in github registry.
Also see Using Docker instead of binary section for more details about using Docker with MCP server with clients in stdio mode.
For building binary from source code you can use the following approach:
git clone https://github.com/VictoriaMetrics/mcp-vmanomaly.git
cd mcp-vmanomaly
make build
docker build -t mcp-vmanomaly .
For local UI/Copilot testing from the vmanomaly repository, build with a local tag:
docker build -t mcp-vmanomaly:local .
Then run the vmanomaly repository helper with:
MCP_VMANOMALY_IMAGE=mcp-vmanomaly:local bin/run-mcp-http.sh
MCP Server for vmanomaly is configured via environment variables:
| Variable | Description | Required | Default | Allowed values |
|---|---|---|---|---|
VMANOMALY_ENDPOINT | vmanomaly server endpoint URL (e.g., http://localhost:8490) | Yes | - | - |
VMANOMALY_BEARER_TOKEN | Bearer token for authenticating with vmanomaly API (mutually exclusive with the token file) | No | - | - |
VMANOMALY_BEARER_TOKEN_FILE | Path to a bearer-token file, suitable for mounted container/orchestrator secrets | No | - | - |
VMANOMALY_HEADERS | Custom HTTP headers for requests (comma-separated key=value pairs, e.g., X-Custom=value1,X-Auth=value2) | No | - | - |
VMANOMALY_REQUEST_TIMEOUT | HTTP timeout for calls from MCP to vmanomaly, e.g. 60s | No | 30s | - |
VMANOMALY_TLS_CA_FILE | PEM CA bundle added to the system trust store to verify the vmanomaly server certificate | No | - | - |
VMANOMALY_TLS_CA_CERT | Same as VMANOMALY_TLS_CA_FILE, but the PEM content itself, for runtimes without file mounts; mutually exclusive with VMANOMALY_TLS_CA_FILE | No | - | - |
VMANOMALY_TLS_CERT_FILE | PEM client certificate for vmanomaly servers that require mutual TLS; set together with the key file | No | - | - |
VMANOMALY_TLS_KEY_FILE | PEM private key for VMANOMALY_TLS_CERT_FILE | No | - | - |
VMANOMALY_TLS_INSECURE_SKIP_VERIFY | Skip server certificate verification. Insecure, for development and testing only | No | false | false, true |
MCP_SERVER_MODE | Server operation mode. See Modes for details. | No | stdio | stdio, http, sse |
MCP_LISTEN_ADDR | Address for HTTP server to listen on | No | localhost:8080 | - |
MCP_ENABLED_TOOLS | Positive comma-separated tool allowlist; empty enables all registered tools | No | - | - |
MCP_DISABLED_TOOLS | Comma-separated tool denylist; takes precedence over the allowlist | No | - | - |
MCP_DISABLE_RESOURCES | Disable all resources (documentation search will continue to work) | No | false | false, true |
MCP_HEARTBEAT_INTERVAL | Heartbeat interval for streamable-http protocol (keeps connection alive through network infrastructure) | No | 30s | - |
MCP_LOG_LEVEL | Log level: debug (verbose), info (default), warn, or error | No | info | - |
MCP_LOG_FILE | Log file path (empty = stderr) | No | stderr | - |
Use an https:// URL in VMANOMALY_ENDPOINT. Server certificates are verified against the system trust store. For a private CA, set VMANOMALY_TLS_CA_FILE, or VMANOMALY_TLS_CA_CERT with the PEM content when the runtime cannot mount files; the CA is added to the system roots. When vmanomaly requires client certificates (mutual TLS), also set VMANOMALY_TLS_CERT_FILE and VMANOMALY_TLS_KEY_FILE. VMANOMALY_TLS_INSECURE_SKIP_VERIFY=true disables server certificate verification and cannot be combined with a custom CA; use it only for development or testing. Certificates are read at startup, so restart the server after rotating them.
MCP Server supports the following modes of operation (transports):
stdio - Standard input/output mode, where the server reads commands from standard input and writes responses to standard output. This is the default mode and is suitable for local servers.http - Streamable HTTP. Server will expose the /mcp endpoint for HTTP connections.sse - Server-Sent Events. Server will expose the /sse and /message endpoints for SSE connections.[!NOTE]
The
ssetransport mode was officially deprecated from MCP
Specification (version 2025-03-26)
and was replaced by Streamable HTTP transport (
httpmode).
In future releases its support can be deprecated, use Streamable HTTP transport if your client supports it.
More info about transports you can find in M