Atlas / MCP servers / originoneai / AWR

AWRBLOCK

mcp/originoneai/awr

Persistent work state and minimal context for long-running AI agents.

Verdict
BLOCK
Grade
D
Trust score
62 /100
Exposed tools
8 5r · 3w · 0d
Transport
streamable-http
License
Apache-2.0
Stars
142
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Let your AI team keep complex projects moving—from goal to verified delivery.

The open-source project delivery platform for people and AI.

English · 简体中文

[](LICENSE) [](https://github.com/originoneai/awr/releases) [](https://www.npmjs.com/package/@originoneai/agent-work-runtime) [](https://pypi.org/project/agent-work-runtime/)

[](https://awr.originoneai.com/) [](#quickstart)

Documentation · Releases · Report an issue · Contribute

AWR connects goals, workstreams, dependencies, context and acceptance into one project delivery workflow. It is built for one person coordinating several agents, and teams delivering a shared project—starting with complex software projects.

Changing sessions, models or collaborators should preserve the project's goals, constraints and verified progress. Parallel work should have clear ownership and handoffs. At every stage, you should be able to tell what is ready, what is waiting, what has been verified, and where the effort went.

People set direction and review outcomes; agents do the work. AWR connects their work to the same project through CLI/MCP, with Team collaboration developing on that foundation. The availability

Read from source at commit 92dc5791bf53OBSERVED · 2026-10-11
02

Connect

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-code
claude mcp add awr-inspector --env TIKTOKEN_CACHE_DIR=${TIKTOKEN_CACHE_DIR} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "awr-inspector": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "TIKTOKEN_CACHE_DIR": "${TIKTOKEN_CACHE_DIR}"
      }
    }
  }
}
03

Exposed tools (8)

5 read · 3 write · 0 destructive.

ToolRiskDescription
awr_changewritePreview, apply, inspect, and recover reviewed source changes.
awr_compactionreadObserve native compaction telemetry, read assessments, or defer advice.
awr_contextreadCompile L1 context, prepare work or completion, and assess management.
awr_continuityreadPersist user waits/replies, read durable operation outcomes, reindex sources.
awr_evidencereadAppend bounded generic events and record evidence bindings.
awr_queryreadRead current action status, claimable work, one work item, or bounded search.
awr_sessionwriteStart, inspect, list, checkpoint, end, resume, or claim bound work sessions.
awr_workwriteApply reviewed work transitions, manage progress, and read dependency graphs.
04

Trust audit

BLOCKgrade D · trust 62/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
none-observed
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
crates/awr-core/src/content_review.rs:519
"-----BEGIN PRIVATE KEY-----\nsynthetic material",
CRITICALHard-coded secrets · secret.private_key · CWE-798, CWE-321
crates/awr-core/src/secrets.rs:1740
assert!(ensure_public_text("-----BEGIN PRIVATE KEY-----").is_err());
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
scripts/evolution/plan_validator_compat.py:115
return yaml.load(path.read_text(), Loader=UniqueLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
crates/awr-team-pg/src/pool.rs:438
let url = "postgres://u:[email protected]:1/db?sslmode=require&connect_timeout=1";
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.github/workflows/team-postgres.yml:50
AWR_TEAM_TEST_DATABASE_URL: postgres://postgres:[email protected]:5432/postgres
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
crates/awr-cli/tests/team_cli.rs:38
"postgres://postgres:[email protected]/awr",
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
crates/awr-team-pg/README.md:12
export AWR_TEAM_TEST_DATABASE_URL='postgres://postgres:[email protected]:55432/postgres'
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
crates/awr-team-pg/tests/pg_schema_gate.rs:61
"postgres://localhost:[email protected]:55432/db",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
crates/awr-server/tests/project_admin_access.rs:88
let token = "awr1.mcp-member.2222222222222222222222222222222222222222222222222222222222222222";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
crates/awr-server/tests/project_admin_access.rs:157
let token = "awr1.mcp-member.2222222222222222222222222222222222222222222222222222222222222222";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/fixtures/team-mcp/biz-acceptance/test_harness_safety.py:56
secret = "s3cret-password-should-not-leak"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/fixtures/team-mcp/biz-acceptance/test_harness_safety.py:75
secret = "another-secret-value"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
crates/awr-cli/tests/content_review.rs:246
"# Protocol\n-----BEGIN PRIVATE KEY-----\nsynthetic material\n",
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
crates/awr-team-pg/tests/tls/server.key:1
-----BEGIN PRIVATE KEY-----
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/fixtures/business/support.py:75
return yaml.load(path.read_text(), Loader=UniqueLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
tests/long-ledger/inspect_sample.py:65
document = yaml.load(body.decode('utf-8'), Loader=UniqueLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
crates/awr-cli/tests/assessment_offline_cli.rs:63
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../tests/fixtures/assessment/replay");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
crates/awr-cli/tests/context_compile_cli.rs:11
const SCOPED_WORK: &str = include_str!("../../../tests/fixtures/workstreams/context.yaml");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
crates/awr-cli/tests/context_compile_cli.rs:12
const SCOPED_MANIFEST: &str = include_str!("../../../tests/fixtures/workstreams/context.toml");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
crates/awr-cli/tests/runtime_snapshot.rs:444
s["database"]["path"] = json!("../../.awr/state.db");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
crates/awr-cli/tests/source_cli.rs:18
include_str!("../../../examples/basic/project.toml"),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/awr-server/tests/oauth_policy.rs:241
"http://127.0.0.1:4321/callback",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/awr-server/tests/oauth_policy.rs:254
"http://127.0.0.2:1234/callback",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/awr-server/tests/web_entry.rs:29
let origin = format!("http://127.0.0.1:7381");
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/awr-team-pg/examples/tc_replay.rs:715
endpoint: "http://127.0.0.1/team/v1".into(),

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 92dc5791bf53full audit observations/trust-audit/mcp-server/originoneai__awr.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1192dc5791bf53BLOCKD62first audit
06

Questions

What is the @originoneai/agent-work-runtime MCP server?

Persistent work state and minimal context for long-running AI agents.

What tools does @originoneai/agent-work-runtime expose?

8 in total: 5 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is @originoneai/agent-work-runtime safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (62/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does @originoneai/agent-work-runtime need?

It reads TIKTOKEN_CACHE_DIR 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 @originoneai/agent-work-runtime run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as awr-inspector at 1.1.0.

How current is this page?

The grade is for one exact copy of the source (92dc5791bf53), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement