mcp: extract community mcp crate
This commit is contained in:
Generated
+24
@@ -415,6 +415,29 @@ dependencies = [
|
|||||||
"uuid",
|
"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]]
|
[[package]]
|
||||||
name = "crank-core"
|
name = "crank-core"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@@ -1255,6 +1278,7 @@ dependencies = [
|
|||||||
"async-trait",
|
"async-trait",
|
||||||
"axum",
|
"axum",
|
||||||
"base64",
|
"base64",
|
||||||
|
"crank-community-mcp",
|
||||||
"crank-core",
|
"crank-core",
|
||||||
"crank-mapping",
|
"crank-mapping",
|
||||||
"crank-registry",
|
"crank-registry",
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ members = [
|
|||||||
"apps/admin-api",
|
"apps/admin-api",
|
||||||
"apps/mcp-server",
|
"apps/mcp-server",
|
||||||
"crates/crank-community-auth",
|
"crates/crank-community-auth",
|
||||||
|
"crates/crank-community-mcp",
|
||||||
"crates/crank-core",
|
"crates/crank-core",
|
||||||
"crates/crank-schema",
|
"crates/crank-schema",
|
||||||
"crates/crank-mapping",
|
"crates/crank-mapping",
|
||||||
|
|||||||
@@ -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 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 / 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.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 не изменено
|
- backward-compatible alias `CommunityMachineCredentialVerifier` сохранен, поведение Community не изменено
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ path = "src/main.rs"
|
|||||||
async-trait = "0.1"
|
async-trait = "0.1"
|
||||||
axum.workspace = true
|
axum.workspace = true
|
||||||
base64.workspace = true
|
base64.workspace = true
|
||||||
|
crank-community-mcp = { path = "../../crates/crank-community-mcp" }
|
||||||
crank-core = { path = "../../crates/crank-core" }
|
crank-core = { path = "../../crates/crank-core" }
|
||||||
crank-registry = { path = "../../crates/crank-registry" }
|
crank-registry = { path = "../../crates/crank-registry" }
|
||||||
crank-runtime = { path = "../../crates/crank-runtime" }
|
crank-runtime = { path = "../../crates/crank-runtime" }
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
mod app;
|
|
||||||
mod auth;
|
|
||||||
mod catalog;
|
|
||||||
mod jsonrpc;
|
|
||||||
mod session;
|
|
||||||
|
|
||||||
use std::{env, net::SocketAddr, time::Duration};
|
use std::{env, net::SocketAddr, time::Duration};
|
||||||
|
|
||||||
|
use crank_community_mcp::{
|
||||||
|
auth::CommunityMachineCredentialVerifier, build_app, session::PostgresTransportSessionStore,
|
||||||
|
};
|
||||||
use crank_registry::{PostgresPoolConfig, PostgresRegistry};
|
use crank_registry::{PostgresPoolConfig, PostgresRegistry};
|
||||||
use crank_runtime::{
|
use crank_runtime::{
|
||||||
RequestRateLimitConfig, RequestRateLimiter, RuntimeCacheConfig, RuntimeCacheStores,
|
RequestRateLimitConfig, RequestRateLimiter, RuntimeCacheConfig, RuntimeCacheStores,
|
||||||
@@ -15,11 +12,6 @@ use sqlx::postgres::PgConnectOptions;
|
|||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
use crate::{
|
|
||||||
app::build_app, auth::CommunityMachineCredentialVerifier,
|
|
||||||
session::PostgresTransportSessionStore,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
tracing_subscriber::fmt()
|
tracing_subscriber::fmt()
|
||||||
@@ -184,8 +176,8 @@ mod tests {
|
|||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
use tracing_subscriber::{filter::LevelFilter, fmt::MakeWriter, prelude::*};
|
use tracing_subscriber::{filter::LevelFilter, fmt::MakeWriter, prelude::*};
|
||||||
|
|
||||||
use crate::{
|
use crank_community_mcp::{
|
||||||
app::build_app,
|
build_app,
|
||||||
auth::{
|
auth::{
|
||||||
CommunityMachineCredentialVerifier, MachineCredentialVerifier,
|
CommunityMachineCredentialVerifier, MachineCredentialVerifier,
|
||||||
MachineCredentialVerifierError, SharedMachineCredentialVerifier,
|
MachineCredentialVerifierError, SharedMachineCredentialVerifier,
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
mod app;
|
||||||
|
pub mod auth;
|
||||||
|
pub mod catalog;
|
||||||
|
pub mod jsonrpc;
|
||||||
|
pub mod session;
|
||||||
|
|
||||||
|
pub use app::build_app;
|
||||||
Reference in New Issue
Block a user