SignOps

Send push to Android, iOS and the web, and ask a trusted phone to approve a login, from your agent.

사용해야 할까요

품질 및 안전성

A
설명 품질
89%
스키마 완전성
92%
이름 품질
98%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (6)

  • LOWTool 'get_push' description lacks action verbget_push에서
  • LOWTool 'register_device' description lacks action verbregister_device에서
  • LOWTool 'list_topics' description lacks action verblist_topics에서
  • LOWTool 'unsubscribe_topic' description lacks action verbunsubscribe_topic에서
  • LOWTool 'get_template' description lacks action verbget_template에서
  • LOWTool 'list_passkeys' description lacks action verblist_passkeys에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,555토큰 (도구 정의)
~731 B일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 2.00%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "signops": {
      "url": "https://api.signops.dev/mcp"
    }
  }
}

원격 엔드포인트

https://api.signops.dev/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (23)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟡send_push(user_id, user_ids, topic, all, title, ...)

Send a push notification to one user (user_id), a list (user_ids, up to 1,000), a topic, or everyone (all: true). Give exactly one target. A push to one user, sent now, answers with its result at once; others answer with status sending or scheduled. With a test key (sk_test_) only test devices receive it.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for one user."
    },
    "user_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Up to 1,000 of your user ids."
    },
    "topic": {
      "type": "string",
      "description": "A topic name."
    },
    "all": {
      "type": "boolean",
      "description": "true to send to every device of the app."
    },
    "title": {
      "type": "string",
      "description": "The notification title."
    },
    "body": {
      "type": "string",
      "description": "The text under it."
    },
    "data": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Key and value pairs the app reads. With no title, the push is silent."
    },
    "image": {
      "type": "string",
      "description": "An https image URL."
    },
    "link": {
      "type": "string",
      "description": "A deep link or URL opened on tap."
    },
    "send_at": {
      "type": "string",
      "description": "An ISO time with a zone, up to 30 days ahead, like 2026-10-24T18:00:00+05:30."
    },
    "template": {
      "type": "string",
      "description": "A saved template's name; title, body and the rest come from it."
    },
    "fields": {
      "type": "object",
      "description": "Values for the template's {{fields}}."
    },
    "fields_by_user": {
      "type": "object",
      "description": "With user_ids: each user's own field values, keyed by user id."
    },
    "marketing": {
      "type": "boolean",
      "description": "true applies the app's daily cap of marketing pushes per user."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional. The same key within 24 hours replays the first answer instead of sending again."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_push(id)

One push by id: status, devices, sent and failed, per platform.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The push id, msg_..."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_pushes(limit, before)

Pushes, newest first. On the Free plan only pushes still to go are listed (no delivery logs).

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "before": {
      "type": "string",
      "description": "The next value from the previous page."
    }
  },
  "required": [],
  "additionalProperties": false
}
🔴cancel_push(id)

Cancel a push that is scheduled and has not started sending.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The push id, msg_..."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
⚪register_device(user_id, token, platform, name)

Store a device's push token under your user id. Android and iOS tokens come from the Firebase or Apple SDK; for web, token is the PushSubscription as JSON.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    },
    "token": {
      "type": "string",
      "description": "The push token."
    },
    "platform": {
      "type": "string",
      "enum": [
        "android",
        "ios",
        "web"
      ]
    },
    "name": {
      "type": "string",
      "description": "Optional label, like Rushi's iPhone."
    }
  },
  "required": [
    "user_id",
    "token",
    "platform"
  ],
  "additionalProperties": false
}
🟢list_devices(user_id)

The devices registered for one user id, newest first, with platform and whether each is trusted for approvals.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🔴remove_device(id)

Remove one device by id; it gets no more pushes.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The device id, dev_..."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_topics

Topics with how many users each has.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟡subscribe_topic(topic, user_id)

Add a user to a topic. The topic exists once it has a user.

입력 스키마

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "Up to 64 letters, digits, dashes, dots or underscores."
    },
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "topic",
    "user_id"
  ],
  "additionalProperties": false
}
🔴unsubscribe_topic(topic, user_id)

Take a user off a topic.

입력 스키마

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "description": "The topic name."
    },
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "topic",
    "user_id"
  ],
  "additionalProperties": false
}
🟢list_templates

Saved push templates with their fields.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢get_template(name)

One template by name.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The template name, like payment_received."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🟡save_template(name, title, body, image, link, ...)

Create or replace a template. Put {{field}} where a value goes, or {{field|default}} for one with a fallback.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Lowercase letters, digits and underscores."
    },
    "title": {
      "type": "string",
      "description": "Title, with {{fields}}."
    },
    "body": {
      "type": "string",
      "description": "Body, with {{fields}}."
    },
    "image": {
      "type": "string",
      "description": "Optional image URL."
    },
    "link": {
      "type": "string",
      "description": "Optional link."
    },
    "data": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Optional data, with {{fields}} in the values."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🔴delete_template(name)

Delete a template by name. Pushes already made from it are not changed.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The template name."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🟡create_approval(user_id, context)

Send an approval request to the user's trusted phone, with number matching. The user must have a phone enrolled through the SignOps SDK.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    },
    "context": {
      "type": "string",
      "description": "What they are approving, up to 120 characters, like Sign in from Chrome on Windows."
    }
  },
  "required": [
    "user_id",
    "context"
  ],
  "additionalProperties": false
}
🟢get_approval(id)

An approval request's status: pending, approved, denied, expired or cancelled.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The approval id, apr_..."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🔴cancel_approval(id)

Cancel a pending approval request.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The approval id, apr_..."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢list_passkeys(user_id)

The passkeys registered for one user id.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🟢get_authenticator(user_id)

Whether a user has an authenticator app (TOTP) confirmed, when it was last used, backup codes left, and whether wrong codes have locked them.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🔴remove_authenticator(user_id)

Remove a user's authenticator app and backup codes, for a lost phone. They can enrol again.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🔴unlock_user(user_id)

Clear the lock that five wrong codes in 15 minutes put on a user, and their count of wrong codes.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🟢export_user(user_id)

Everything SignOps holds on one user id as JSON: devices (tokens shortened), topics, passkeys, authenticator status, approvals of the last 90 days, consent history and pushes sent to them.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}
🟢get_consent(user_id)

The latest consent answer per purpose for one user, like marketing_push, and the history.

입력 스키마

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "Your own id for the user."
    }
  },
  "required": [
    "user_id"
  ],
  "additionalProperties": false
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 23개