mcp: extract community mcp crate

This commit is contained in:
github-ops
2026-05-14 20:10:44 +00:00
parent 7c2a8f4fac
commit c080692df5
12 changed files with 64 additions and 13 deletions
Generated
+24
View File
@@ -415,6 +415,29 @@ dependencies = [
"uuid",
]
[[package]]
name = "crank-community-mcp"
version = "0.1.0"
dependencies = [
"async-trait",
"axum",
"base64",
"crank-core",
"crank-registry",
"crank-runtime",
"crank-schema",
"futures-util",
"serde",
"serde_json",
"sha2",
"sqlx",
"thiserror",
"time",
"tokio",
"tracing",
"uuid",
]
[[package]]
name = "crank-core"
version = "0.1.0"
@@ -1255,6 +1278,7 @@ dependencies = [
"async-trait",
"axum",
"base64",
"crank-community-mcp",
"crank-core",
"crank-mapping",
"crank-registry",
+1
View File
@@ -3,6 +3,7 @@ members = [
"apps/admin-api",
"apps/mcp-server",
"crates/crank-community-auth",
"crates/crank-community-mcp",
"crates/crank-core",
"crates/crank-schema",
"crates/crank-mapping",
+1
View File
@@ -160,4 +160,5 @@ Progress:
- Phase 0 / task `0.16`: phase verification gate пройден — `just fmt`, `just check`, `just test`, таргетные Community machine-auth tests и MCP initialize smoke (`requires_initialized_notification_before_tool_methods`) зеленые; runtime regression test обновлен под новый `RuntimeError::ProtocolAdapter` contract
- Phase 1 / tasks `1.1``1.3`: strict-REST Community cleanup уже был закрыт ранее — non-REST adapters и `crank-proto` удалены из workspace, descriptor/premium UI surface убран из Community build, wizard и i18n приведены к REST-only baseline
- Phase 1 / task `1.4`: создан crate `crank-community-auth`; в него вынесены password hashing/session cookie primitives и `PasswordIdentityProvider`, `admin-api` переключен на этот crate, а `login()` теперь реально делегирует credential check через `IdentityProvider` seam
- Phase 1 / task `1.5`: создан crate `crank-community-mcp`; в него вынесены `build_app`, `catalog`, `jsonrpc`, `session` и `auth` из `apps/mcp-server`, а `apps/mcp-server/src/main.rs` стал thin launcher с env parsing и DI wiring
- backward-compatible alias `CommunityMachineCredentialVerifier` сохранен, поведение Community не изменено
+1
View File
@@ -13,6 +13,7 @@ path = "src/main.rs"
async-trait = "0.1"
axum.workspace = true
base64.workspace = true
crank-community-mcp = { path = "../../crates/crank-community-mcp" }
crank-core = { path = "../../crates/crank-core" }
crank-registry = { path = "../../crates/crank-registry" }
crank-runtime = { path = "../../crates/crank-runtime" }
+5 -13
View File
@@ -1,11 +1,8 @@
mod app;
mod auth;
mod catalog;
mod jsonrpc;
mod session;
use std::{env, net::SocketAddr, time::Duration};
use crank_community_mcp::{
auth::CommunityMachineCredentialVerifier, build_app, session::PostgresTransportSessionStore,
};
use crank_registry::{PostgresPoolConfig, PostgresRegistry};
use crank_runtime::{
RequestRateLimitConfig, RequestRateLimiter, RuntimeCacheConfig, RuntimeCacheStores,
@@ -15,11 +12,6 @@ use sqlx::postgres::PgConnectOptions;
use tokio::net::TcpListener;
use tracing::info;
use crate::{
app::build_app, auth::CommunityMachineCredentialVerifier,
session::PostgresTransportSessionStore,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
@@ -184,8 +176,8 @@ mod tests {
use tokio::time::sleep;
use tracing_subscriber::{filter::LevelFilter, fmt::MakeWriter, prelude::*};
use crate::{
app::build_app,
use crank_community_mcp::{
build_app,
auth::{
CommunityMachineCredentialVerifier, MachineCredentialVerifier,
MachineCredentialVerifierError, SharedMachineCredentialVerifier,
+25
View File
@@ -0,0 +1,25 @@
[package]
name = "crank-community-mcp"
edition.workspace = true
license.workspace = true
rust-version.workspace = true
version.workspace = true
[dependencies]
async-trait = "0.1"
axum.workspace = true
base64.workspace = true
crank-core = { path = "../crank-core" }
crank-registry = { path = "../crank-registry" }
crank-runtime = { path = "../crank-runtime" }
crank-schema = { path = "../crank-schema" }
futures-util = "0.3"
serde.workspace = true
serde_json.workspace = true
sha2.workspace = true
sqlx.workspace = true
thiserror.workspace = true
time.workspace = true
tokio = { workspace = true, features = ["sync"] }
tracing.workspace = true
uuid.workspace = true
+7
View File
@@ -0,0 +1,7 @@
mod app;
pub mod auth;
pub mod catalog;
pub mod jsonrpc;
pub mod session;
pub use app::build_app;